2011-07-23 9 views
3

私はF#を試してきましたが、C#プロジェクトで言語の恩恵を受ける特定のコードを試してみたいと思います。F#名前空間/モジュールとInterop with 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はクラスでなければなりません。トリムはそのクラスの静的メンバーです。

答えて

10

これは、名前空間とクラスがF#で動作する方法に起因するものではありません。

問題は、File1という名前空間とFile1という名前空間があることです。 File1をC#プログラムに書き込むときに、正しいusingを持っていても、 "クラスFile1.File1"ではなく "namespace File1"を意味します。たとえば、名前空間の名前をFileNamespaceに変更し、typeFileTypeという名前を変更した場合、すべてが期待通りに機能します。 (私はあなたの実際のプロジェクトでこのような名前を使用するべきではないと言っています)

+0

それは理にかなっています。名前の1つを変更するだけでFileが機能しました。 –