2011-07-23 79 views
3

我一直在嘗試使用F#,並且想嘗試在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應該是一個類。修剪是該類的靜態成員。

回答

10

這不是由F#中命名空間和類的行爲方式引起的,你有這個權利。

問題是您有一個名爲File1的名稱空間和一個名爲File1的類。當你在你的C#程序中編寫File1時,即使你有正確的using,它的意思是「命名空間File1」,而不是「類File1.File1」。例如,如果您將名稱空間的名稱更改爲FileNamespace,並將type的名稱更改爲FileType,則所有內容都將按預期工作。 (我不是說你應該在你的實際項目中使用這樣的命名。)

+0

這很有道理。將其中一個名稱更改爲File工作。 –