【问题标题】:F# Namespaces/Modules and Interop with C#F# 命名空间/模块和与 C# 的互操作
【发布时间】:2011-07-23 18:31:19
【问题描述】:

我一直在尝试使用 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 声明拉入了命名空间,并且 File1 应该是一个类。 Trim 是该类的静态成员。

【问题讨论】:

    标签: c# f# interop


    【解决方案1】:

    这不是由 F# 中的命名空间和类的行为方式引起的,你说得对。

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

    【讨论】:

    • 这是有道理的。将其中一个名称更改为 File 有效。
    猜你喜欢
    • 2010-11-12
    • 2011-01-22
    • 1970-01-01
    • 2011-06-26
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2019-04-10
    相关资源
    最近更新 更多