-2

本质上,我们得到的是:

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(); }
}

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

4

1 回答 1

1

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

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(); }
    }
于 2012-12-13T17:56:49.270 回答