I have a C# project with a generic interface
public interface IMyFoo<T> { void DoSomething(T instance); }
I also have a C# project with an interface that inherits from several IMyFoos
public interface IMyBar : IMyFoo<Type1>, IMyFoo<Type2> { ... }
Everything works fine in C# land (including the scenario below which doesn’t work in VB).
I have a VB .NET project that references this C# library.
I have an instance of IMyBar and try to use as follows:
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)'.
What’s up? I can DirectCast like this and it works fine…but I’d REALLY rather not
DirectCast(bar, IMyFoo(Of MyType1)).DoSomething(instance)
You’re probably going to have to cast:
Unlike other types, which only derive from a single base type, an interface may derive from multiple base interfaces. Because of this, an interface can inherit an identically named type member from different base interfaces. In such a case, the multiply-inherited name is not available in the derived interface, and referring to any of those type members through the derived interface causes a compile-time error, regardless of signatures or overloading. Instead, conflicting type members must be referenced through a base interface name.