2015-08-11 5 views
-1

У меня есть класс с общим типомНаследование от класса, который имеет общий тип

class GenericClass<T> where T : new() 
{ 
    public T GenericType; 

    public GenericClass() 
    { 
     GenericType = new T(); 
    } 
} 

теперь я хочу, чтобы создать новые классы, которые наследуют от своих GenericClass, но проходящие новый класс в качестве типа.

так ...

class Class1:GenericClass<Class1> 
{ 
    public string Class1Property { get; set; } 
} 

class Class2 : GenericClass<Class2> 
{ 
    public string Class2Property { get; set; } 
} 

Если я это сделаю, а затем создать новый экземпляр класса 1, код переходит в бесконечный цикл.

Class1 c1 = new Class1(); 

Является ли то, что я пытаюсь сделать возможным?

+0

Хорошо, что вы пытаетесь сделать? Вы хотели сохранить только _type_ 'T', а не _instance_' T'? –

+4

'class Class1: GenericClass ' бесконечный цикл, как вы узнали, что вы ожидали от него? –

+0

Вы также можете проверить, существует ли 'typeof (T) == typeof (this)', чтобы избежать бесконечного цикла, но не совсем ясно, что вы пытаетесь сделать. –

ответ

4

Линия

GenericType = new T(); 

в вашей базе конструктора вызов конструктора для типа наследуемого, который вызывает базовый конструктор, который продолжает цикл.

Если вы просто пытаетесь отслеживать тип класса, который унаследовал, попробуйте

typeof(T); 

или

this.GetType(); 

как они получают вам тип, не создавая новый экземпляр класса тип.

Смежные вопросы