C#新泛型约束不使用最高构造函数

时间:2012-12-13 17:49:00

标签: c# generics

基本上,我们得到的是:

public class A {
...
    public A() { ... }
...
}

public class B : A {
...
    public B() : base()
    { throw new Exception(); }
...
}

但是:

public class Test<T>
    where T : A, new()
{
    public void doStuff() { B b = new B(); }
}

并没有抛出异常。这真的很混乱!我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

以下代码按预期引发异常。我想你没有正确使用你的Test类,因为你没有发布代码。

public MainWindow()
    {
        InitializeComponent();

        Test<B> myTest = new Test<B>();
        myTest.doStuff(); // throws exception in B()
    }

    public class A
    {
        public A() { }
    }

    public class B : A
    {
        public B()
            : base()
        {
            throw new Exception();
        }

    }

    public class Test<T> where T : A, new()
    {
        // I modified this because the intent is to use T correct?
        public void doStuff() { T test = new T(); }
    }