2016-04-23 10 views
4

私は、次の構文を参照してください。このcomparerのC#構文はどのように機能しますか?

var comparer = Comparer<TItem>.Default; 

この構文は動作しない方法は?

私はComparer

+0

あなたは正確にどの構文を話していますか?あなたはジェネリック薬を意味する? –

+0

@shiva関連 - http://stackoverflow.com/questions/3037203/are-static-members-of-a-generic-class-tied-to-the-specific-instance –

答えて

1

Comparerを明示的に新しくする必要がないのは、Defaultがプロパティで、プロパティがコードを持つことができるということです。これは、静的プロパティにも適用されます。

static Comparer<T> Default { 
    get { 
     ... 
     return new ClassExtendingComparer<T>(); 
    } 
} 

これは、フィールド/プロパティ構文を使用してアクセスされるパラメータのないファクトリメソッドになります。

5

Defaultは静的プロパティであり、そのためのComparer<T>のインスタンスを持たずにアクセスすることができ、最大new'dなければならないと思っているだろう。

インスタンスを通じて静的メンバーを参照することはできません。代わりに、型名を通して参照されます。

Comparer<TItem>はここでの型名です。

+0

これは一般的なアクセサプロパティで、フードの下のメソッドであり、静的なデータフィールドではありません。これは、プロパティが指定された型を動的に使用してデフォルトの比較元を参照できることを意味します。 – shiva

+0

これはプロパティであり、フィールドではないので、コードを実行できます。 – MarcinJuraszek

関連する問題