使用重载的构造函数实例化泛型类型

Bra*_*ore 5 c# oop

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目标冲突.

我的下一个倾向是使用反射,但在我这样做之前,我想知道我是否忽略了更简单的方法来做到这一点,或者可能是一个更好的工作方式?

Luk*_*keH 4

你不能直接这样做。您需要使用Activator.CreateInstance,但这样做会带来反射的所有缺点,这意味着您会错过编译时检查等。

public Test()
{
    var t = (T)Activator.CreateInstance(typeof(T), (object)"blah");
}
Run Code Online (Sandbox Code Playgroud)