相关疑难解决方法(0)

为什么C#编译器在从不同的基类派生时会抱怨"类型可能统一"?

我当前的非编译代码与此类似:

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,而不是 …

c# generics

74
推荐指数
3
解决办法
5132
查看次数

标签 统计

c# ×1

generics ×1