2016-11-07 4 views
3

あなたはと呼ばれるインタフェースがある場合 - 例えば - IInterface、このようなコードを書くことは完全に合法であるC#で:目的(メソッドはIInterface)

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_引数を探しています。 –

関連する問題