1

我有一个基类,实现了一个接口,它大大简化如下:

interface I
{
    void DoStuff<T>(T t) where T : class;
}

class A : I
{
    public virtual void DoStuff<T>(T t) where T : class
    {
        // do some work
        System.Console.WriteLine(t);
    }
}

我是这样从这个类派生的:

class B : A
{
    public override void DoStuff<T>(T t)
    {
        DoMoreSpecificStuff(() => { base.DoStuff(t); });
    }

    public void DoMoreSpecificStuff(Action action)
    {
        // set some stuff up before calling the action
        action();
        // tear some stuff down
    }
}

然后像这样使用专门的类:

I i = new B();
i.DoStuff("Hello World");

这会在运行时抛出一个VerificationExceptionwith消息。Method Constraints.A.DoStuff: type argument 'T' violates the constraint of type parameter 'T'.

该问题可以通过以下任一方式解决 *制作闭包() => { new A().DoStuff(t); } *创建方法B.BaseDoStuff<T>(T t) where T : class { base.DoStuff(t); }

我已经使用第二个选项解决了它,但我真的很好奇为什么这不起作用。有任何想法吗?

4

0 回答 0