相关疑难解决方法(0)

VB.NET:无法在System.Object实例上使用Extension方法

我可以为System.Object(所有)的所有子类创建一个Extension方法吗?

例:

<Extension>
Public Function MyExtension(value As Object) As Object
    Return value
End Function
Run Code Online (Sandbox Code Playgroud)

以上函数不适用于对象实例:

Dim myObj1 As New Object()
Dim myObj2 = myObj1.MyExtension()
Run Code Online (Sandbox Code Playgroud)

编译器不接受它,是我电脑中的问题?:)

更新
问题似乎只发生在VB中,其中对象的成员通过反射(后期绑定)查找.

在回答
FYI 之后更新,因为vb具有C#缺少的优点,导入模块的成员被导入到全局范围,因此您仍然可以在没有包装器的情况下使用此函数:

Dim myObj2 = MyExtension(myObj1)
Run Code Online (Sandbox Code Playgroud)

.net vb.net extension-methods object late-binding

37
推荐指数
3
解决办法
7293
查看次数

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

我有一个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) 
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

如果从C#调用,扩展可以正常工作,但是如果从外部VB.Net应用程序调用则会出现问题:

Dim something = Me.SomethingManager.GetSomething(key)
Dim result = something.ExtensionMethod("extra")
Run Code Online (Sandbox Code Playgroud)

这编译很好但在运行时抛出异常:

未找到类型'SomethingB'上的公共成员'ExtensionMethod'.

如果将VB.Net更改为显式使类型为其工作的接口:

Dim something as ISomething = Me.SomethingManager.GetSomething(key)
Dim result = something.ExtensionMethod("extra")
Run Code Online (Sandbox Code Playgroud)

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

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

.net vb.net extension-methods

5
推荐指数
1
解决办法
2454
查看次数

VB.NET应用程序中的C#代码?

我有一个应用程序,现在使用VB.NET构建

我需要添加一些C#代码我现有的内部VB.NET应用程序做它可能还是没有

.net c# vb.net visual-studio

2
推荐指数
1
解决办法
2072
查看次数