Подтвердить что ты не робот

С# create Object obj = new T()?

У меня есть суперкласс, который мы можем назвать class A и несколько подклассов, например. class a1 : A, class a2 : A,... и a6 : A. В моем class B у меня есть набор методов, который создает и добавляет один из подклассов к List<A> в B.

Я хочу сократить свой код, который у меня есть на данный момент. Поэтому вместо написания

Adda1()
{
    aList.Add( new a1() );
}

Adda2()
{
    aList.Add( new a2() );
} 

...

Adda6()
{
    aList.Add( new a6() );
}

Вместо этого я хочу написать что-то похожее на это

Add<T>()
{
    aList.Add( new T() );  // This gives an error saying there is no class T.
}

Возможно ли это?

Можно ли также ограничить, что T должен иметь тип A или один из его подклассов?

4b9b3361

Ответ 1

Ответ Ли правильный.

Причина в том, что для вызова new T() вам нужно добавить ограничение new() к вашему параметру типа:

void Add<T>() where T : new()
{
     ... new T() ...
}

Вам также необходимо ограничение T : A, чтобы вы могли добавить свой объект типа T в List<A>.

Примечание. Когда вы используете new() вместе с другими ограничениями, ограничение new() должно быть последним.

Похожие

Ответ 2

public void Add<T>() where T : A, new()
{
    aList.Add(new T());
}