你能定义与 C# 兼容的无名称空间扩展方法吗?
Can you define namespace-less extension methods compatible with C#?
我知道您可以在 C# 中定义空命名空间 扩展方法,您能否在 F# 中定义相同的方法以供 C# 使用?我按照 this general post 获取 C# 兼容的扩展方法,但我没有找到 1-1 转换的最后一步。
这不是重复的,我正在寻找就 C# 而言在全局命名空间中定义扩展方法的方法,而不是如何在 F# 中定义 C# 可以看到的常规扩展方法。
您绝对可以在 F# 中创建此类扩展方法。这可以通过 Global Namespace exploiting the feature that an F# module declared outside of any namespace gets into this default 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());
}
}
我知道您可以在 C# 中定义空命名空间 扩展方法,您能否在 F# 中定义相同的方法以供 C# 使用?我按照 this general post 获取 C# 兼容的扩展方法,但我没有找到 1-1 转换的最后一步。
这不是重复的,我正在寻找就 C# 而言在全局命名空间中定义扩展方法的方法,而不是如何在 F# 中定义 C# 可以看到的常规扩展方法。
您绝对可以在 F# 中创建此类扩展方法。这可以通过 Global Namespace exploiting the feature that an F# module declared outside of any namespace gets into this default 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());
}
}