Was erweitern wir beim Erstellen einer generischen Erweiterungsmethode?

9
%Vor%

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 ?

    
P.Brian.Mackey 04.04.2012, 15:31
quelle

2 Antworten

1
  

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.

    
jason 04.04.2012, 16:54
quelle
3

Ja, es ist System.Object , es sei denn, Sie fügen eine Typbeschränkung hinzu.

    
Donut 04.04.2012 15:32
quelle

Tags und Links