对不起,不久前我写了一段非常好的代码。而现在我正试着为一个新项目记住它。
我记得的一切就是它看起来像这样:
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
答案 0 :(得分: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的答案。
答案 1 :(得分:1)
您可以指定泛型类型的条件。如果你指定它必须有一个构造函数,你甚至不需要Activator来调用它:
public static Create<T>() where T : new() {
return new T();
}
如果你想在构造函数调用中使用参数,你可以使用Activator,但是那个类应该有一个无参数构造函数的条件是没有意义的。