2009-12-01 73 views

回答

10

它們是一樣的。

我更喜歡使用'new',除了這是我習慣於的其他語言以外,沒有什麼好的理由,並且它更容易爲構造函數調用找到tr/ grep(缺少智能工具來'查找所有引用'在解決方案中)。

+0

似乎是最好的選擇,是的。 – Stringer 2009-12-02 00:28:38

18

我覺得省略「新」更實用一些,所以這是我的偏好。我喜歡你可以像處理返回類型實例的其他函數一樣處理構造函數。

+0

也有道理..我認爲重要的是做出選擇,然後遵守它。 – Stringer 2009-12-03 21:03:10

9

我第二什麼kvb說。此外,我省略了new,因爲這允許我直接在構造對象上調用成員,就像在C#中一樣。例如,後續的代碼工作:

DateTime(2012, 12, 21).ToString() 

下面的代碼確實編譯錯誤不工作和結果:

new DateTime(2012, 12, 21).ToString() 

所以現在我需要加上括號,以獲得new表達它編譯:

(new DateTime(2012, 12, 21)).ToString() 

我不喜歡額外的括號,所以我現在避免使用new

一個案例我仍然會使用它的是當我創建一個實現IDisposable的對象。這是因爲如果我省略了new關鍵字創建IDisposable F#編譯器會發出警告時:

let writeFile = 
    let writer = StreamWriter(@"hello.txt") 
    writer.WriteLine("hello") 

結果在此:

warning FS0760: It is recommended that objects that support the IDisposable interface are created using 'new Type(args)' rather than 'Type(args)' to indicate that resources may be owned by the generated value

我可以通過在new添加擺脫警告關鍵字:

let writeFile = 
    let writer = new StreamWriter("hello.txt") 
    writer.WriteLine("hello") 

警告也使我認識到,我真的應該有一個use我的結合:

let writeFile = 
    use writer = new StreamWriter("hello.txt") 
    writer.WriteLine("hello") 

但如果我寫我的代碼使用new所有的時間然後我將永遠不會得到警告,提醒我,我有IDisposable工作!

它也可以減少打字。 ;-)

+0

非常合乎邏輯的推理,爲什麼不使用'new',而只在必要時使用''use'。使用圓括號會導致乾淨的代碼。 – bugfoot 2016-12-20 09:45:38

相關問題