C# F#名称空间/模块和与C的互操作#
我一直在试验F#,并想尝试在C#项目中使用F#来编写某些代码,这些代码将从该语言中受益 我一直在试图弄清楚在C#项目中使用模块和名称空间时是如何工作的。例如,以下代码:C# F#名称空间/模块和与C的互操作#,c#,f#,interop,C#,F#,Interop,我一直在试验F#,并想尝试在C#项目中使用F#来编写某些代码,这些代码将从该语言中受益 我一直在试图弄清楚在C#项目中使用模块和名称空间时是如何工作的。例如,以下代码: namespace File1 #light type File1(path : string) = static member Trim(p : string) = p.Trim() member self.Path = path 然后我试着在C#中使用它,说: using File1; class Pr
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
时,即使使用获得了正确的,也表示“名称空间File1
”,而不是“类File1.File1
”。例如,如果将名称空间的名称更改为FileNamespace
,将类型的名称更改为FileType
,则一切都将按预期进行。(我不是说你应该在实际项目中使用这样的命名。)这是有道理的。将其中一个名称更改为“仅文件”有效。