C # Polymorphismus

7


Was ist der Unterschied zwischen Laufzeitpolymorphismus und kompilierbarer Polymorphie? Worin besteht der Unterschied zwischen früher Bindung und später Bindung? Beispiele würden sehr geschätzt.

    
NoviceToDotNet 01.10.2010, 18:36
quelle

3 Antworten

31

Kompilierzeit-Polymorphismus

Das Überladen von Methoden ist ein gutes Beispiel. Sie können zwei Methoden mit demselben Namen, aber unterschiedlichen Signaturen verwenden. Der Compiler wählt die richtige Version zur Kompilierung.

Laufzeitpolymorphismus

Das Überschreiben einer virtuellen Methode von einer Elternklasse in einer Kindklasse ist ein gutes Beispiel. Ein anderer ist eine Klasse, die Methoden von einem Interface implementiert. Auf diese Weise können Sie den allgemeineren Typcode verwenden, während Sie die vom untergeordneten Objekt angegebene Implementierung verwenden. Angesichts der folgenden Klassendefinitionen:

%Vor%

Der folgende Code wird "Goodbye World!" ausgeben:

%Vor%

Frühe Bindung

Angabe des Typs zur Kompilierzeit:

%Vor%

Späte Bindung

Der Typ wird zur Laufzeit festgelegt:

%Vor%     
Justin Niessner 01.10.2010, 18:45
quelle
3

UPDATE: Bitte lesen Sie Eric Lipperts Kommentare zu dieser Antwort.

In C # 2 ist die gesamte Bindung früh, weil C # 2 eine statisch typisierte Sprache ist. Eine späte Bindungssprache wäre eine, in der die Methodenbindung zur Laufzeit auftritt. (C # 4 enthält ein spätes Bindungsmerkmal mit der Einführung von dynamic .)

Ich bin mir nicht sicher, was Sie mit Laufzeit-Polymorphismus im Vergleich zu Kompilierungszeit meinen.

Der C # -Compiler ermittelt zur Kompilierzeit, welche Methodenüberladung aufgerufen wird. Der Laufzeittyp einer Instanz bestimmt, welche Implementierung einer bestimmten Methodenüberladung ausgeführt wird. Dies wird immer noch als frühe Bindung angesehen, obwohl sie zur Laufzeit auftritt, da die ausgewählte Methode als Implementierung einer bestimmten Überladung virtueller Methoden definiert ist und es nicht möglich ist, dass ein solcher Aufruf eine typbezogene Ausnahme wie can generiert auftreten mit einer dynamischen Sprache und späte Bindung.

    
Jeffrey L Whitledge 01.10.2010 18:49
quelle
3

Eine sehr einfache und direkte Antwort auf den Unterschied zwischen der Kompilierzeit und dem Laufzeitpolymorphismus.

Zeitkompromiss für die Kompilierung - Überladen der Methode (mit demselben Methodennamen, aber mit unterschiedlicher Signatur). Bitte überprüfen Sie das Video zum Überladen von Methoden unter dieser URL Ссылка

Laufzeitpolymorphismus - Überschreiben von Methoden (Das Aufrufen der überlagerten Methoden der untergeordneten Klasse zur Laufzeit mithilfe einer Basisklassenreferenzvariablen wird als Laufzeitpolymorphismus bezeichnet). Überprüfen Sie die Videos zum Überschreiben der Methode (Polymorphismus) unter dieser URL Ссылка

    
Venkat 30.06.2012 10:12
quelle

Tags und Links