繁体   English   中英

F#命名空间/模块和C#Interop

[英]F# Namespaces/Modules and Interop with C#

我一直在尝试使用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是该类的静态成员。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM