首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么VB.Net不能在接口上找到扩展方法?

为什么VB.Net不能在接口上找到扩展方法?
EN

Stack Overflow用户
提问于 2012-05-31 08:03:40
回答 4查看 2.8K关注 0票数 5

我有一个C#库,它有一个扩展方法,类似于:

代码语言:javascript
复制
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应用程序调用,则会出现问题:

代码语言:javascript
复制
Dim something = Me.SomethingManager.GetSomething(key)
Dim result = something.ExtensionMethod("extra")

这可以很好地编译,但在运行时抛出一个异常:

未找到“SomethingB”类型上的公共成员“SomethingB”。

如果将VB.Net更改为显式地使该类型成为接口,则它可以工作:

代码语言:javascript
复制
Dim something as ISomething = Me.SomethingManager.GetSomething(key)
Dim result = something.ExtensionMethod("extra")

为什么?为什么扩展方法在接口上工作,而不是在实现它的类上工作?如果我使用子类,我会有同样的问题吗?VB.Net的扩展方法实现是否不完整?

在C#库中有什么可以让VB.Net在没有显式接口的情况下工作吗?

EN

Stack Overflow用户

发布于 2012-05-31 08:06:30

如果它抛出一个异常,而不是提供编译时错误,那就意味着您已经删除了选项严格 .我不知道在这种情况下扩展方法会发生什么,因为它们通常是在编译时解析的,但是在选项严格关闭的情况下,已经开始了后期绑定。

我建议你严格选择,一切都会好的.

(您还需要导入名称空间,按照Richard的回答,但我认为您已经这样做了。无论如何,如果您忘记在打开选项后执行该操作,您将看到编译时错误。

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10829615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档