我当前的非编译代码与此类似:
public abstract class A { }
public class B { }
public class C : A { }
public interface IFoo<T>
{
void Handle(T item);
}
public class MyFoo<TA> : IFoo<TA>, IFoo<B>
where TA : A
{
public void Handle(TA a) { }
public void Handle(B b) { }
}
Run Code Online (Sandbox Code Playgroud)
C#编译器拒绝编译它,引用以下规则/错误:
'MyProject.MyFoo <TA>'无法同时实现'MyProject.IFoo <TA>'和'MyProject.IFoo <MyProject.B>',因为它们可能会统一某些类型参数替换
我理解这个错误意味着什么; 如果TA可以是任何东西那么它在技术上也可能B会引入两种不同Handle实现的模糊性.
但TA 不可能是任何东西.基于类型层次结构,TA 不能是B- 至少,我不认为它可以. TA必须派生自A,而不是 …