在类库中重载VB.NET扩展方法

时间:2010-07-20 12:42:52

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

似乎我用VB.NET编写的扩展方法库存在问题。

我有2个重载的扩展方法Crop()。

当我从VB.NET项目中引用lib时,我看到它们。如果从C#项目引用它,我看不到它们。

到底是怎么回事?

3 个答案:

答案 0 :(得分:3)

它的工作原理如下:

  • 在C#中,当您使用outref参数调用方法时,编译器要求您在调用参数上重复outref关键字。这是因为对于语言来说,变量是否已经初始化是很重要的。
  • 在VB.NET中,当您使用ByRef参数调用方法时,编译器不要求您在调用参数上重复ByRef,它只是为您排序。这是因为语言与变量是否已经初始化无关。

因此,VB.NET可以使用ByRef轻松解析扩展方法,因为只有一种可能的方法可以调用它。但是,C#不知道该怎么做,因为没有语法告诉它是否使用outref来调用该方法。

您所能做的就是:

  • 重写您的扩展方法,尽可能使用ByVal参数。
  • 如果那是不可能的,那么你就会像通常的方法那样用C#调用它们。

答案 1 :(得分:1)

如果没有看到代码,我猜你在C#.cs文件中缺少using语句。

//other usings...

//Extension using statement...
using MyAssembly.Extensions;

class Program {
  static void Main() {
    //some code
    String myString = "blah";

    //call the extension method now
    String newString = myString.MyExtensionMethod();
  }
}

但这只是猜测而没有看到你的代码。

希望这会有所帮助!!

答案 2 :(得分:0)

我的方法是使用byref参数。我将它改为byval并且有效。

显然很奇怪。在VB项目中它可以,但在C#中没有。显然C#不支持使用byref的扩展方法,或者它是一个bug。