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
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
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.
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.
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
Es ist eine Eigenschaft, kein Feld, also ja, es kann Code ausführen. – MarcinJuraszek
Über welche Syntax sprichst du genau? Du meinst Generika? –
@shiva Related - http://stackoverflow.com/questions/3037203/are-static-members-of-a-generic-class-tied-to-the-specific-instance –