我有一个具有扩展方法的 C# 库,例如:
public interface ISomething { ... }
public class SomethingA : ISomething { ... }
public class SomethingB : ISomething { ... }
public static class SomethingExtensions
{
public static int ExtensionMethod(this ISomething input, string extra)
{
}
}
如果从 C# 调用该扩展可以正常工作,但如果从外部 VB.Net 应用程序调用则会出现问题:
Dim something = Me.SomethingManager.GetSomething(key)
Dim result = something.ExtensionMethod("extra")
这编译得很好,但在运行时抛出异常:
未找到类型“SomethingB”的公共成员“ExtensionMethod”。
如果将 VB.Net 更改为显式使该类型成为其工作的接口:
Dim something as ISomething = Me.SomethingManager.GetSomething(key)
Dim result = something.ExtensionMethod("extra")
为什么?为什么扩展方法只作用于接口而不作用于实现它的类?如果我使用子类,我会遇到同样的问题吗?VB.Net 的扩展方法实现不完整吗?
我可以在 C# 库中做些什么来使 VB.Net 在没有显式接口的情况下工作吗?