Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# F#名称空间/模块和与C的互操作#_C#_F#_Interop - Fatal编程技术网

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

我一直在试验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 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
,则一切都将按预期进行。(我不是说你应该在实际项目中使用这样的命名。)

这是有道理的。将其中一个名称更改为“仅文件”有效。