私は、次の構文を参照してください。このcomparerのC#構文はどのように機能しますか?
var comparer = Comparer<TItem>.Default;
この構文は動作しない方法は?
私はComparer
が
私は、次の構文を参照してください。このcomparerのC#構文はどのように機能しますか?
var comparer = Comparer<TItem>.Default;
この構文は動作しない方法は?
私はComparer
が
Comparerを明示的に新しくする必要がないのは、Defaultがプロパティで、プロパティがコードを持つことができるということです。これは、静的プロパティにも適用されます。
static Comparer<T> Default {
get {
...
return new ClassExtendingComparer<T>();
}
}
これは、フィールド/プロパティ構文を使用してアクセスされるパラメータのないファクトリメソッドになります。
Default
は静的プロパティであり、そのためのComparer<T>
のインスタンスを持たずにアクセスすることができ、最大new'dなければならないと思っているだろう。
インスタンスを通じて静的メンバーを参照することはできません。代わりに、型名を通して参照されます。
Comparer<TItem>
はここでの型名です。
これは一般的なアクセサプロパティで、フードの下のメソッドであり、静的なデータフィールドではありません。これは、プロパティが指定された型を動的に使用してデフォルトの比較元を参照できることを意味します。 – shiva
これはプロパティであり、フィールドではないので、コードを実行できます。 – MarcinJuraszek
あなたは正確にどの構文を話していますか?あなたはジェネリック薬を意味する? –
@shiva関連 - http://stackoverflow.com/questions/3037203/are-static-members-of-a-generic-class-tied-to-the-specific-instance –