我有一个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”类型上的公共成员“SomethingB”。
如果将VB.Net更改为显式地使该类型成为接口,则它可以工作:
Dim something as ISomething = Me.SomethingManager.GetSomething(key)
Dim result = something.ExtensionMethod("extra")为什么?为什么扩展方法在接口上工作,而不是在实现它的类上工作?如果我使用子类,我会有同样的问题吗?VB.Net的扩展方法实现是否不完整?
在C#库中有什么可以让VB.Net在没有显式接口的情况下工作吗?
发布于 2012-05-31 08:06:30
如果它抛出一个异常,而不是提供编译时错误,那就意味着您已经删除了选项严格 .我不知道在这种情况下扩展方法会发生什么,因为它们通常是在编译时解析的,但是在选项严格关闭的情况下,已经开始了后期绑定。
我建议你严格选择,一切都会好的.
(您还需要导入名称空间,按照Richard的回答,但我认为您已经这样做了。无论如何,如果您忘记在打开选项后执行该操作,您将看到编译时错误。
https://stackoverflow.com/questions/10829615
复制相似问题