我有一个带有通用接口(interface)的 C# 项目
public interface IMyFoo<T> { void DoSomething(T instance); }
我还有一个 C# 项目,其接口(interface)继承自多个 IMyFoos
public interface IMyBar : IMyFoo<Type1>, IMyFoo<Type2> { ... }
在 C# 环境中一切正常(包括下面在 VB 中不工作的场景)。
我有一个引用此 C# 库的 VB .NET 项目。
我有一个 IMyBar 实例并尝试按如下方式使用:
Dim instance as MyType1 = ...
Dim bar as IMyBar = ...
bar.DoSomething(instance) ' This generates a compile error:
' 'DoSomething' is ambiguous across the inherited interfaces 'IMyFoo(Of MyType1)' and 'IMyFoo(Of MyType2)'.
怎么了?我可以像这样使用 DirectCast 并且它工作正常......但我真的不想
DirectCast(bar, IMyFoo(Of MyType1)).DoSomething(instance)
最佳答案
您可能需要 cast :
与仅派生自单个基类型的其他类型不同,一个接口(interface)可以派生自多个基接口(interface)。因此,接口(interface)可以从不同的基接口(interface)继承同名类型成员。在这种情况下,多重继承的名称在派生接口(interface)中不可用,并且通过派生接口(interface)引用任何这些类型成员都会导致编译时错误,无论签名或重载如何。相反,必须通过基本接口(interface)名称引用冲突的类型成员。
关于c# - VB.NET 与 C# 的交叉兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5095236/