VB.NET与C#在面向对象特性上有哪些具体差异?
- 内容介绍
- 文章标签
- 相关推荐
本文共计331个文字,预计阅读时间需要2分钟。

我有一款具有通用接口的C语言库。
我有一个带有通用接口的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:
与仅从单个基本类型派生的其他类型不同,接口可以从多个基本接口派生.因此,接口可以从不同的基接口继承同名的类型成员.在这种情况下,乘法继承的名称在派生接口中不可用,并且通过派生接口引用任何这些类型成员会导致编译时错误,无论签名或重载如何.相反,必须通过基接口名称引用冲突类型成员.
本文共计331个文字,预计阅读时间需要2分钟。

我有一款具有通用接口的C语言库。
我有一个带有通用接口的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:
与仅从单个基本类型派生的其他类型不同,接口可以从多个基本接口派生.因此,接口可以从不同的基接口继承同名的类型成员.在这种情况下,乘法继承的名称在派生接口中不可用,并且通过派生接口引用任何这些类型成员会导致编译时错误,无论签名或重载如何.相反,必须通过基接口名称引用冲突类型成员.

