加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

VB.NET与C#交叉兼容

发布时间:2020-12-17 07:19:35 所属栏目:百科 来源:网络整理
导读:我有一个带有通用接口的C#项目 public interface IMyFooT { void DoSomething(T instance); } 我还有一个C#项目,其接口继承了几个IMyFoos public interface IMyBar : IMyFooType1,IMyFooType2 { ... } 在C#land中一切正常(包括下面的方案在VB中不起作用). 我
我有一个带有通用接口的C#项目

public interface IMyFoo<T> { void DoSomething(T instance); }

我还有一个C#项目,其接口继承了几个IMyFoos

public interface IMyBar : IMyFoo<Type1>,IMyFoo<Type2> { ... }

在C#land中一切正常(包括下面的方案在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:

与仅从单个基本类型派生的其他类型不同,接口可以从多个基本接口派生.因此,接口可以从不同的基接口继承同名的类型成员.在这种情况下,乘法继承的名称在派生接口中不可用,并且通过派生接口引用任何这些类型成员会导致编译时错误,无论签名或重载如何.相反,必须通过基接口名称引用冲突类型成员.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读