Im Rahmen der objektorientierten Programmierung besteht die Möglichkeit, eine Methode in einer abgeleiteten Klasse zu überschreiben, d.h. neu zu implementieren und somit Polymorphie zu erzielen. Zum Beispiel: Public MustInherit Class Tier Public MustOverride Sub Schreien() ... End Class Eine Implementation könnte sein: Public Class Katze Inherits Tier Public Overrides Sub Schreien() ' Miauen ... End Sub ... End Class Eine weitere Implementation: Public Class Hund Inherits Tier Public Overrides Sub Schreien() ' Bellen ... End Sub ... End Class Das Problem bei diesem Code liegt darin, dass in den überschriebenen Methoden so gut wie jede Implementation möglich ist. Wenn aber z. B. die Basisklasse eine bestimmte Implementation erwartet, nämlich eine bestimmte Codesequenz, etwa den Aufruf der "Sub Wecke_Herrchen (Herrchen As Object)", dann stellt sich die Frage, wie das realisiert werden kann. Möglich wäre zunächst, in der Basisklasse "Tier" die Methode so zu definieren... Public Overridable Sub Schreien() Wecke_Herrchen(Herrchen) End Sub ...und für abgeleitete Klassen in der Dokumentation vorzuschreiben, dass jede überschriebene Version der Methode "Schreien" den Aufruf "MyBase.Schreien" enthalten muss. Das kann aber nicht erzwungen werden. Die hier vorgestellte Lösung beruht darauf, dass nicht nur als "Public" deklarierte Methoden als überschreibbar deklariert werden können, sondern auch solche, die als "Protected" deklariert sind, und auch die Methoden der Basisklasse die überschriebenen Versionen dieser Methoden aufrufen. In der Basisklasse "Tier" kann die Methode Schreien somit als nicht überschreibbar wie folgt codiert werden: Public Sub Schreien() Schrei_was_du_willst Wecke_Herrchen (Herrchen) End Sub Sodann ist folgende Definition einzufügen: Protected MustOverride Sub Schrei_was_du_willst() In der abgeleiteten Klasse "Katze" etwa wäre dann wie folgt zu codieren: Protected Overrides Sub Schrei_was_du_willst() ' Miauen ... End Sub Auf diese Weise ist im Sinne der Polymorphie wie der angestrebten Funktionalität das gewünschte Ergebnis erreicht: Der Hund bellt, die Katze miaut und das Herrchen wird in jedem Fall geweckt. Dieser Tipp wurde bereits 11.325 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |