vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Verschiedenes / Sonstiges   |   VB-Versionen: VB2005, VB200830.05.08
Möglichkeiten der Polymorphie bei abgeleiteten Klassen einschränken

Die Überschreibung von öffentlichen Methoden (Public MustOverride/ Overridable Sub bzw. Function) bietet die Möglichkeit der Polymorphie. Wie lasen sich diese Möglichkeiten soweit einschränken, dass ein bestimmtes Grundverhalten erzwungen wird?

Autor:   Hans-Joachim MeßnerBewertung:     [ Jetzt bewerten ]Views:  11.326 
ohne HomepageSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11kein Beispielprojekt 

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:
Basisklasse:

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.326 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel