2016-01-17 27 views
4

大家都知道,我們不可能寫出這樣的代碼在當前版本的C#:爲什麼在C#中的泛型參數沒有構造函數參數約束?

public class A { 
    public static void Method<T>() where T : new(string, string) { 
     var x = new T("foo", "bar"); 
    } 
} 

,但我們可以用new()約束來強制執行T具有公共參數的構造函數,然後我們可以創建T使用new T()表達式的新實例。

關於各種解決方法,SO上有很多答案,但其中沒有解釋爲什麼語言設計者沒有實現這樣的功能。從SO上的問題數量來看,它看起來在閱讀世界應用程序時會很有用。

爲什麼這個特性沒有在C#中實現,是否有機會在下一版本的語言中添加它?

+0

準確地向誰解決這個問題? 「爲什麼」這樣的問題對於SO來說是不合適的。 –

+0

它有點違背了通用的目的,因爲現在你的通用代碼必須知道類型太多了。出於同樣的原因,在接口中不能有構造函數,構造函數是實現細節。 – CodeCaster

+4

[*我一直在問「爲什麼C#不實現特性X?」。答案總是相同的:因爲沒有人設計,指定,實施,測試,記錄和發佈該功能。*](https://blogs.msdn.microsoft.com/ericlippert/2009/06/22/why- doesnt-c-implement -top-level-methods) – PetSerAl

回答

5

根據這個feature request link on github,原因是CLR沒有提供C#需要實現它的信息。

有人推測可能會修改CLR以便將來的C#版本(7.0?)支持此功能。

相關問題