Hierbei handelt es sich um eine Miniserie, die die Unterschiede bei Überladungen, Schatten und Überschreibungen in VB.NET behandelt. Dieser Artikel behandelt Außerkraftsetzungen. Die Artikel, die die anderen behandeln, sind hier:
-> Überlastungen
-> Schatten
Diese Techniken können sehr verwirrend sein; Es gibt viele Kombinationen dieser Schlüsselwörter und der zugrunde liegenden Vererbungsoptionen. Microsofts eigene Dokumentation wird dem Thema nicht gerecht und es gibt viele schlechte oder veraltete Informationen im Web. Der beste Rat, um sicherzustellen, dass Ihr Programm richtig codiert ist, lautet "Testen, testen und erneut testen". In dieser Serie werden wir sie einzeln betrachten und dabei die Unterschiede hervorheben.
Die Gemeinsamkeit von Shadows, Overloads und Overrides besteht darin, dass sie den Namen von Elementen wiederverwenden, während sie das ändern, was passiert. Schatten und Überladungen können sowohl innerhalb derselben Klasse als auch dann ausgeführt werden, wenn eine Klasse eine andere Klasse erbt. Überschreibungen können jedoch nur in einer abgeleiteten Klasse (manchmal als untergeordnete Klasse bezeichnet) verwendet werden, die von einer Basisklasse (manchmal als übergeordnete Klasse bezeichnet) erbt. Und Overrides ist der Hammer; Damit können Sie eine Methode (oder eine Eigenschaft) einer Basisklasse vollständig ersetzen.
In dem Artikel über Klassen und das Schlüsselwort Shadows (siehe: Shadows in VB.NET) wurde eine Funktion hinzugefügt, um zu zeigen, dass auf eine geerbte Prozedur verwiesen werden kann.
Öffentliche Klasse ProfessionalContact '… Code wird nicht angezeigt… Öffentliche Funktion HashTheName (ByVal nm As String) As String Rückgabe nm.GetHashCode End Function End Class
Der Code, der eine von dieser abgeleitete Klasse instanziiert (CodedProfessionalContact im Beispiel), kann diese Methode aufrufen, da sie geerbt wird.
In diesem Beispiel habe ich die GetHashCode-Methode von VB.NET verwendet, um den Code einfach zu halten. Dies ergab ein ziemlich nutzloses Ergebnis, den Wert -520086483. Angenommen, ich möchte stattdessen ein anderes Ergebnis zurückgeben, aber,
-> Ich kann die Basisklasse nicht ändern. (Vielleicht habe ich nur Code von einem Anbieter kompiliert.)
… und…
-> Ich kann den Anrufcode nicht ändern. (Vielleicht gibt es tausend Exemplare und ich kann sie nicht aktualisieren.)
Wenn ich die abgeleitete Klasse aktualisieren kann, kann ich das zurückgegebene Ergebnis ändern. (Der Code könnte beispielsweise Teil einer aktualisierbaren DLL sein.)
Es gibt ein Problem. Da es so umfassend und leistungsstark ist, müssen Sie über die Berechtigung der Basisklasse verfügen, um Overrides verwenden zu können. Aber gut gestaltete Codebibliotheken bieten es. (Ihre Codebibliotheken sind alle gut gestaltet, oder?) Zum Beispiel ist die von Microsoft bereitgestellte Funktion, die wir gerade verwendet haben, überschreibbar. Hier ist ein Beispiel für die Syntax.
Öffentliche überschreibbare Funktion GetHashCode As Integer
Daher muss dieses Schlüsselwort auch in unserer Beispielbasisklasse vorhanden sein.
Öffentliche überschreibbare Funktion HashTheName (ByVal nm As String) As String