class MyClass<T> where T: new()
{
public Test()
{
var t = new T();
var t = new T("blah"); // <- How to do this?
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这不可能像书面那样,据我所知,它只是根本不允许(虽然我只想错过这个).想到的第一个解决方案是使用对象初始化程序,但我们假设这是最后的手段,因为在这种情况下它会与其他oop目标冲突.
我的下一个倾向是使用反射,但在我这样做之前,我想知道我是否忽略了更简单的方法来做到这一点,或者可能是一个更好的工作方式?
你不能直接这样做。您需要使用Activator.CreateInstance
,但这样做会带来反射的所有缺点,这意味着您会错过编译时检查等。
public Test()
{
var t = (T)Activator.CreateInstance(typeof(T), (object)"blah");
}
Run Code Online (Sandbox Code Playgroud)