c# - VB.NET 与 C# 的交叉兼容性

标签 c# .net vb.net interop

我有一个带有通用接口(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/

相关文章:

c# - 这两个 C# console.write 语法有什么区别?

c# - 我们是否可以使用远程方法调用将 linux 中的 C++ 程序与充当服务器的 C# 程序进行通信?

c# - Nhibernate:连接表并从其他表获取单列

mysql - 如何使用mysql查询将datagridview中的文本框列替换为复选框列

c# - 在 Windows 资源管理器中打开文件夹结构时,DirectoryInfo.Delete(True) 不会删除

vb.net - 如何将 .csv 文件导入到 vb.net 中的 datagridview?

c# - 如何使用 RestSharp 发送请求

c# - 将文件/类移动到另一个项目

c# - MongoDB .NET 驱动程序 : AsQueryable() is not found

.net - 如何在 Windows 8/RT xaml 中显示消息框?