С# 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
или один из его подклассов?
Ответы
Ответ 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());
}