2016-11-07 47 views
3

如果你有一個名爲界面 - 例如 - IInterface,在C#這是完全合法的,像這樣寫代碼:目的默認的(IInterface)在C#

var i = default(IInterface); 

但它總是返回null

允許這樣一個表達式具有唯一結果的目的是什麼?一個接口也可以通過數字或結構類來實現,所以默認的null不可用。 那麼,除了允許default(IInterface)在語言中選擇的原因是什麼?

+1

接口是引用類型:[Structs,Interfaces and Boxing](http://stackoverflow.com/questions/3032750/structs-interfaces-and-boxing)。 –

+1

通用代碼中的關鍵。當需要轉換使用Nothing的VB.NET代碼時非常方便。或者,如果您有IntPtr類型的可選參數,則不能使用IntPtr.Zero。 –

回答

8

default(T)運算符是爲泛型類型引入的。

如果T是一個類型參數,它將爲參考類型返回null或值類型爲new T()

一旦運營商存在,沒有理由限制它只能使用類型參數,所以它適用於所有類型。

+0

我會深入的部分是「沒有理由限制」......因爲您可以使每個功能更加靈活和更寬廣,但是它在開發,維護,學習曲線等方面的成本。 「沒有理由限制」是一個基於意見的_negative_參數,我正在尋找一些_positive_參數來允許這樣的語法。 –