2010-04-25 1 views
0

Извините, но некоторое время назад я написал код, который был так хорош. И теперь я пытаюсь запомнить его для нового проекта.Weird <T> Вопрос активатора

Все, что я помню о нем, что это выглядело примерно так:

public static Create<T>() *something missing here* : *Something missing here* 
{ 
    // add methods etc here. I also think I remember something like " Activator.CreateInstance" being used. But I'm not sure. 
} 

ли кто-нибудь написанный код, как это раньше? В основном, что он сделал, он создал элемент управления и передал его обратно в другой проект.

Спасибо JT

+1

@ j-t-s: Пожалуйста, не забудьте отметить ответ на сообщение, ответив на ваш вопрос. –

+0

Да, это было на мой взгляд на века. Я должен был купить больше предоплаченного Интернета, чтобы вернуться сюда, чтобы отметить это как ответ. – 2010-04-25 13:11:13

ответ

1

Вероятно, это выглядело примерно так:

public static Create<T>() where T : new() 
{ 
    return Activator.CreateInstance(typeof(T)); 
} 

Некоторые пояснения:

  • Activator.CreateInstance(typeof(T)) создает объект типа T. Вы можете опционально передать параметры вызываемому конструктору (проверьте reference documentation for a parameter overview for Activator.CreateInstance), но так как это должно работать почти для любого T, предоставление аргументов конструктора слишком специфично и не является хорошей идеей.

  • Именно поэтому where T : new() не требуется. Это ставит ограничение new() на параметр типа T. Это означает, что этот метод действителен только для типов T, которые предоставляют конструктор без параметров («по умолчанию»).


P.S .: Обратите внимание, что вам нужно только Activator.CreateInstance, когда все, что вы должны работать на это System.Type. В приведенном выше примере вы фактически имеете имя типа T, поэтому new T() было бы предпочтительнее. См. Ответ @ Guffa для этого.

+0

вы также можете использовать Activator.CreateInstance () –

+0

Спасибо! Это тот! : D Я думаю, что моя память временно погибла, LOL. – 2010-04-25 07:29:59

1

Вы можете указать условие для типового типа. Если указать, что он должен иметь конструктор, вам даже не нужно Активатор назвать:

public static Create<T>() where T : new() { 
    return new T(); 
} 

Если вы хотите использовать параметры в вызове конструктора, можно использовать активатор, но условие что класс должен иметь конструктор без параметров, бессмыслен.

+0

Благодарим вас за ответ. :) – 2010-04-25 07:29:14

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