为什么我不能强制派生类来拥有无参数构造函数?

Ben*_*ink 7 c# generics

我正在尝试执行以下操作:

class Program
{
    static void Main(string[] args)
    {
        foo<baz> fooObject = new foo<baz>();
        AnotherClass<baz> _baz = new AnotherClass<baz>();
        _baz.testMethod(fooObject);
    }
}

public class AnotherClass<T> where T : bar
{
    public void testMethod(foo<T> dummy)
    {
        foobar = dummy;
    }

    private foo<T> foobar = null;
}

public class foo<T> where T : bar, new()
{
    public foo()
    {
        _t = new T();
    }

    private T _t;

}

public abstract class bar
{
    public abstract void someMethod();
    // Some implementation
}

public class baz : bar
{
    public override void someMethod()
    {
        //Implementation
    }
}    
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,解释'T'必须是一个非抽象类型,带有一个公共无参数构造函数,以便在泛型类型或方法中将其用作参数'T'.我完全理解为什么这一定是,并且还明白我可以将一个类型为'T'的预初始化对象作为构造函数参数传递,以避免必须"新"它,但是有什么方法可以解决这个问题吗?任何方法来强制从'bar'派生的类来提供无参数构造函数?

修复 - 我在AnotherClass()上缺少'new()'约束.

Ger*_*nck 7

正确的语法是

public class foo<T> where T : bar, new()
Run Code Online (Sandbox Code Playgroud)


Ian*_*cer 5

你不是在你的AnotherClass上错过了一个new()约束吗?

public class AnotherClass<T> where T : bar, new()
Run Code Online (Sandbox Code Playgroud)

如果没有VS2010拒绝编译,那就可以了.