2016-04-23 11 views
4

Ich sehe die folgende Syntax:Wie funktioniert diese C# -Syntax im Vergleich?

var comparer = Comparer<TItem>.Default; 

Wie funktioniert diese Syntax funktioniert?

Ich hätte gedacht, dass die Comparer würde

+0

Über welche Syntax sprichst du genau? Du meinst Generika? –

+0

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

Antwort

1

Der Trick, Comparer nicht explizit neu zu erstellen, ist, dass Default eine Eigenschaft ist und Eigenschaften Code haben dürfen. Dies gilt sowohl für statische als auch Eigenschaften:

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

Dies entspricht eine Parameter lose Fabrik Methode zugegriffen eine Feld/Eigenschaftssyntax.

5

Default ist eine statische Eigenschaft haben new'd auf, und aus diesem Grunde kann, ohne dass eine Instanz von Comparer<T> Zugang sein.

Ein statisches Element kann nicht durch eine Instanz referenziert werden. Stattdessen wird auf den Typnamen verwiesen.

Comparer<TItem> ist ein Typname hier.

+0

So ist es eine generische Accessor-Eigenschaft, die anruft eine Methode unter der Haube und kein statisches Datenfeld. Und das bedeutet, dass die Eigenschaft den angegebenen Typ dynamisch zum Suchen des Standardvergleichs verwenden kann? – shiva

+0

Es ist eine Eigenschaft, kein Feld, also ja, es kann Code ausführen. – MarcinJuraszek

Verwandte Themen