来自C#dll的扩展方法在VB.NET中不能作为扩展

时间:2010-09-17 06:31:01

标签: c# .net vb.net extension-methods

实际上我不知道他们是否应该工作

我在C#中创建了一个库,我被人们告知我的一种方法在VB.NET中不能作为扩展 http://valueinjecter.codeplex.com/Thread/View.aspx?ThreadId=227498

这是方法:

public static PropertyDescriptorCollection GetProps(this object o)
{
   return GetProps(o.GetType());
}

1 个答案:

答案 0 :(得分:5)

一般来说,C#扩展方法在VB.Net中运行得很好,反之亦然。一个例外是this参数明确键入Object时。由于遗留原因,VB.Net不支持在键入Object的引用上使用扩展方法。

之所以有可能导致代码以不同的语义静默重新编译。 VB.Net(和C#)认为导入包含扩展方法的命名空间不应该导致现有代码的静默重新绑定到扩展方法。如果VB.Net允许在Object上使用扩展方法,则后期绑定调用可能会以静默方式重新绑定到扩展方法,从而更改代码。

例如。请考虑在扩展方法之前编写的以下内容。

Dim local As Object = ... 
local.GetProps() ' This is a late bound call

如果VB.Net允许在GetProps上定义Object扩展方法,那么只需导入命名空间就会将GetProps的含义从后期绑定更改为扩展方法调用。