c# - F# 命名空间/模块和与 C# 的互操作

标签 c# f# interop

我一直在尝试使用 F#,并希望在 C# 项目中尝试将它用于某些将从该语言中受益的代码片段。

我一直在努力弄清楚模块和命名空间在 C# 项目中的使用方式。例如下面的代码:

namespace File1
#light

type File1(path : string) =
    static member Trim(p : string) = p.Trim()
    member self.Path = path

然后我尝试在 C# 中使用它:

using File1;

class Program
{
    static void Main(string[] args)
    {
        // Doesn't work
        Console.WriteLine(File1.Trim(" hello "));
        // Does work
        Console.WriteLine(File1.File1.Trim(" hello "));
    }
}

我明白为什么第二个有效,但为什么第一个无效?我已经使用 using 声明引入了 namespace ,并且 File1 应该是一个类。 Trim 是该类的静态成员。

最佳答案

这不是由 namespace 和类在 F# 中的行为方式引起的,您没看错。

问题是您有一个名为 File1 的命名空间和一个名为 File1 的类。当您在 C# 程序中编写 File1 时,即使您有正确的 using,它的意思是“namespace File1”,而不是“class >File1.File1”。例如,如果您将命名空间的名称更改为 FileNamespace,并将 type 的名称更改为 FileType,那么一切都会按预期进行。 (我并不是说您应该在实际项目中使用这样的命名。)

关于c# - F# 命名空间/模块和与 C# 的互操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6802440/

相关文章:

javascript - 是否可以解释 C# 表达式树以发出 JavaScript?

c# - 在 C# 中模拟雷达的最佳方法是什么?

visual-studio - 在 F# Interactive 上运行 F# 测试

F# 循环依赖与消息处理

c# - 从 C# 调用 C++ dll 函数时出现问题

暴露给 VBA (COM) 的 C# 属性 : Run-time error '424' : Object required

c# - Wpf\MVVM - 我应该在哪里放置 View 相关属性?

c# - Java 中的 BigInteger.mod 等效于 C#

.net - F# Guideline 是否建议声明具有相同名称的模块和类型?

java - 如何为我的 Scala 代码提供一个 Java 友好的界面?