In der angegebenen Klasse habe ich einen generischen Typ als Erweiterungstyp für das Schlüsselwort this
angegeben. Da ich die Definition des Typs bis zur Kompilierzeit verzögert habe, wie weiß Intellisense (und alles andere), welchen Typ ich erweitere? Versetzt sich C # einfach auf die oberste Ebene System.Object
?
Da ich die Definition des Typs bis zur Kompilierzeit verzögert habe, woher weiß Intellisense (und alles andere), welchen Typ ich erweitere? Ist C # einfach auf der obersten Ebene System.Object?
Diejenigen, die sagen, dass dies eine Erweiterung von System.Object
ist, sind falsch. Zum einen wird diese Methode keine Eingabewerte vom Typ "Wert" eingeben, sondern eine Erweiterungsmethode, die in System.Object
definiert ist.
Die von Ihnen definierte Erweiterungsmethode ist eine generisch parametrisierte Erweiterungsmethode. Es kann auf jeden Typ angewendet werden, der als generischer Typparameter gilt.
Wenn Sie nicht bereits über Erweiterungsmethoden auf die folgende Weise nachdenken, könnte dies Ihnen helfen, sie ein wenig besser zu verstehen. Erweiterungsmethoden sind nur ein Trick, mit dem uns die Sprachspezifikation durchkommen lässt. Erweiterungsmethoden sind wirklich nur statische Methoden in statischen Klassen, die wir so aufrufen können, als wären sie Instanzmethoden. Also
%Vor%ist nur eine statische Methode in einer statischen Klasse. Man könnte es so nennen:
%Vor%aber wir können es so nennen, als wäre es eine Instanzmethode:
%Vor%Wenn Sie also eine generische Erweiterungsmethode haben, halten Sie für eine Minute an und denken Sie darüber nach wie eine statische Methode in einer statischen Klasse
%Vor%Man könnte es so nennen:
%Vor%oder Sie können es so nennen:
%Vor%Es gibt keinen Unterschied zu dem Compiler, den Sie schreiben.
Also, jetzt denkst du daran als eine normale generische Methode. Aber sicherlich, wenn Sie darüber aus dieser Perspektive denken, verstehen Sie, dass der Compiler Sie diese Methode für jeden Typ aufrufen lässt, der als generischer Typparameter gültig ist. Und so verstehen Sie jetzt, warum es als eine Erweiterungsmethode für jeden Typ betrachtet werden kann, der als generischer Typparameter gültig ist.
Tags und Links c#