你能定义与C#兼容的无名称空间扩展方法吗?

时间:2015-03-14 17:42:09

标签: f# c#-to-f#

我知道你可以在c#中定义空命名空间扩展方法,你能在F#中定义相同的方法供C#使用吗?我遵循了this关于获得C#兼容扩展方法的一般帖子,但是我没有任何运气来确定1-1转换的最后一步。

这不是重复,我正在寻找定义C#所涉及的全局命名空间中的扩展方法的方法,而不是如何定义C#中可以看到的F#中的常规扩展方法。 / p>

1 个答案:

答案 0 :(得分:2)

肯定可以在F#中创建这样的扩展方法。这可以通过Global Namespace利用在任何名称空间外声明的F#模块进入此默认global名称空间的功能来实现,如下面的代码片段所示:

// Tested under Visual Studio 2013 Premium/F# 3.1:

// F# library module
[<System.Runtime.CompilerServices.Extension>]
module Extension
    [<System.Runtime.CompilerServices.Extension>]
    let Superb(s: System.String) = "Superb!!!"

// Use extension method on System.String from C# console app:
class Test
{
    static void Main(string[] args)
    {
        System.Console.WriteLine("abc".Superb());
    }
}