Ich bin auf mehrere Instanzen von C # -Code gestoßen, wie die folgenden:
public static int Foo(this MyClass arg)
Ich konnte keine Erklärung dafür finden, was das this
Schlüsselwort in diesem Fall bedeutet. Irgendwelche Einsichten?
Ich bin auf mehrere Instanzen von C # -Code gestoßen, wie die folgenden:
public static int Foo(this MyClass arg)
Ich konnte keine Erklärung dafür finden, was das this
Schlüsselwort in diesem Fall bedeutet. Irgendwelche Einsichten?
Antworten:
Dies ist eine Erweiterungsmethode . Eine Erklärung finden Sie hier .
Mithilfe von Erweiterungsmethoden können Entwickler dem öffentlichen Auftrag eines vorhandenen CLR-Typs neue Methoden hinzufügen, ohne ihn unterordnen oder den ursprünglichen Typ neu kompilieren zu müssen. Erweiterungsmethoden helfen dabei, die Flexibilität der Unterstützung für "Enten-Typisierung", die heutzutage in dynamischen Sprachen beliebt ist, mit der Leistung und Validierung zur Kompilierungszeit stark typisierter Sprachen zu kombinieren.
Erweiterungsmethoden ermöglichen eine Vielzahl nützlicher Szenarien und ermöglichen das wirklich leistungsstarke LINQ-Abfrage-Framework ....
es bedeutet, dass Sie anrufen können
MyClass myClass = new MyClass();
int i = myClass.Foo();
eher, als
MyClass myClass = new MyClass();
int i = Foo(myClass);
Dies ermöglicht den Aufbau fließender Schnittstellen wie unten angegeben.
Scott Gu's zitierter Blog-Beitrag erklärt es gut.
Für mich ist die Antwort auf die Frage in der folgenden Aussage in diesem Beitrag:
Beachten Sie, dass die obige statische Methode vor dem ersten Parameterargument vom Typ string ein Schlüsselwort "this" hat. Dies teilt dem Compiler mit, dass diese bestimmte Erweiterungsmethode Objekten vom Typ "Zeichenfolge" hinzugefügt werden soll. Innerhalb der IsValidEmailAddress () -Methodenimplementierung kann ich dann auf alle öffentlichen Eigenschaften / Methoden / Ereignisse der tatsächlichen Zeichenfolgeninstanz zugreifen, für die die Methode aufgerufen wird, und true / false zurückgeben, je nachdem, ob es sich um eine gültige E-Mail handelt oder nicht.
this
Schlüsselworts in der Methodensignatur ist. Die anderen Antworten sagen nur unbeholfen: "Es ist eine Erweiterungsmethode." Ich habe nie vollständig verstanden, wie Erweiterungsmethoden an die Typen "anhängen", die sie erweitern, bis ich diese Antwort gelesen habe. Danke dir!
Zusätzlich zu Preet Sanghas Erklärung:
Intellisense zeigt die Erweiterungsmethoden mit einem blauen Pfeil an (z. B. vor "Aggregat <>"):
Du brauchst ein
using the.namespace.of.the.static.class.with.the.extension.methods;
Damit die Erweiterungsmethoden angezeigt werden und verfügbar sind, wenn sie sich in einem anderen Namespace befinden als der Code, der sie verwendet.
Sie sind Erweiterungsmethoden . Willkommen in einer ganz neuen fließenden Welt . :) :)
Ich habe das neulich selbst gelernt: Das Schlüsselwort this definiert, dass die Methode eine Erweiterung der Klasse ist, die sie fortführt. In Ihrem Beispiel verfügt MyClass über eine neue Erweiterungsmethode namens Foo (die keinen Parameter akzeptiert und ein int zurückgibt. Sie kann wie jede andere öffentliche Methode verwendet werden).
"this" erweitert die nächste Klasse in der Parameterliste
In der Methodensignatur unten erweitert "this" also "String". Die Zeile wird als normales Argument an die Methode an die Funktion übergeben. public static string [] SplitCsvLine (diese String-Zeile)
Im obigen Beispiel erweitert "diese" Klasse die eingebaute "String" -Klasse.