使用F#代码中的C#中定义的扩展方法

Tim*_*hyP 11 c# extension-methods f#

我为C#库中的各种类定义了一系列扩展方法.我正在编写一些F#代码,而不是重写代码,我只想在我的F#代码中使用现有的扩展方法.

我添加了对库的引用并使用open语句导入命名空间,但扩展方法没有出现在F#中

Meh*_*ari 18

更新:

在当前版本的F#中,您可以通过添加来简单地使用扩展方法

open TheNamespaceOfExtensionMethod
Run Code Online (Sandbox Code Playgroud)

到您的源文件(就像您在C#中使用using指令一样)并简单地调用扩展方法,就像它是一个普通的实例方法一样.

顺便说一句,您可以像普通的静态方法一样直接调用它们,并将对象引用作为第一个参数传递,如果需要,不带任何指令.扩展方法只是一个用ExtensionAttribute引擎盖下装饰的静态方法.

原始答案(在F#2010测试版之前;不再是真实的,正如Dykam指出的那样):

我不认为F#支持扩展方法.您可以像普通静态方法一样直接调用它们,并将对象引用作为第一个参数传递.

  • +1.确切地说,扩展方法是语言功能,而不是CLR功能.它们实际上是语法糖,使某些静态方法看起来像实例方法. (6认同)

Bri*_*ian 9

下一版本的F#将支持能够"导入"C#/ VB扩展方法.

也可以看看

C#中的F#扩展方法

有关该主题的更多详细信息.