我有一个基类,实现了一个接口,它大大简化如下:
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");
这会在运行时抛出一个VerificationException
with消息。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); }
我已经使用第二个选项解决了它,但我真的很好奇为什么这不起作用。有任何想法吗?