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.
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%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.
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 Ссылка
Tags und Links c# polymorphism