VB.NET bietet zur Modifikation vererbter Eigenschaften einer Klasse verschiedene Techniken:
In der deutschsprachigen VB-Dokumentation wid das Verfahren der Überschattung auch als Spiegelung bezeichnet. Im Hinblick auf die Vererbung der Standardeigenschaft (DEFAULT PROPERTY) einer Klasse, gibt es ein problematisches Phänomen: Er vererbt sich zudem auf abgeleitete Klassen weiter. Aus diesem Grund sollte bei der Überschattung bzw. Überladung der geerbten Standard-Eigenschaft immer das Schlüsselwort DEFAULT verwendet werden, damit der Zugriff auf die Standard-Eigenschaft der Basisklasse völlig blockiert wird und auch bei der Weitervererbung eindeutige Zugriffsverhältnisse vorliegen. Die Effekte im einzelnen demonstriert der kommentierte DEMO-Code. ' ================================================================================== ' Modul 'modDefaultProperty' ' ================================================================================== ' VB.NET 2005 Option Explicit On Option Strict On Module modDefaultProperty ' Das Modul enthält eine Ableitungskette von Klassen ' und dient der Demonstration der Vererbung der ' STANDARD-EIGENSCHAFT einer Klasse bei den verschiedenen ' Techniken: ÜBERLADEN, ÜBERSCHATTEN, ÜBERSCHREIBEN ' unter Verwendung bzw. Weglassung de Schlüsselworts DEFAULT Public Class cA ' Die 'Basisklasse' mit der ' Standardeigenschaft 'TestEigenschaft' Default ReadOnly Property TestEigenschaft(ByVal x As Integer) As String Get Dim str As String str = "Standard-Testeigenschaft der Klasse 'cA'" + vbCrLf + _ "Default ReadOnly Property" MsgBox(str) Return str End Get End Property End Class Public Class cA1 Inherits cA ' Die geerbte Standardeigenschaft aus der Klasse 'cA' ' wird durch eine 'einfache' Eigenschaft zwar überladen, ' bleibt als Standard-Eigenschaft von 'cA1' aber erhalten ' und wird als Standard-Eigenschaft auch weitervererbt Overloads ReadOnly Property TestEigenschaft(ByVal x As Integer) As String Get Dim str As String str = "TestEigenschaft der Klasse cA1" + vbCrLf + _ "Overloads ReadOnly Property" MsgBox(str) Return str End Get End Property End Class Public Class cA2 Inherits cA1 ' Die Klasse 'cA2' erbt von 'cA1' deren Standardeigenschaft ' und vererbt sie weiter ' Auch die Überladung der Standard-Eigenschaft durch eine ' 'einfache' Eigenschaft mit verkürzter Parameterliste ' ändert daran nichts Overloads ReadOnly Property TestEigenschaft() As String Get Dim str As String str = "TestEigenschaft der Klasse cA2" + vbCrLf + _ "Overloads ReadOnly Property" MsgBox(str) Return str End Get End Property End Class Public Class cA3 Inherits cA2 ' Die Klasse 'cA2' vererbt die von 'cA1' geerbte ' Standardeigenschaft zwar an 'cA3' weiter, ' aber deren Aufruf wird durch ' die Überladung der Standardeigenschaft in 'cA3' blockiert ' und sie wird deshalb auch nicht mehr weitervererbt Default Overloads ReadOnly Property TestEigenschaft(ByVal x As Integer) As String Get Dim str As String str = "Standard-Testeigenschaft der Klasse cA3" + vbCrLf + _ "Default Overloads ReadOnly Property" MsgBox(str) Return str End Get End Property End Class Public Class cA4 Inherits cA3 ' Die Klasse 'cA4' erbt die Standardeigenschaft von 'cA3', ' und vererbt sie weiter ' Die 'Beschattung' des Namens der geerbten Standard-Eigenschaft ' durch eine gleichnamige Methode ändert daran nichts Shadows Function Testeigenschaft() As String Dim str As String str = "Testmethode der Klasse cA4" + vbCrLf + _ "Shadows Function" MsgBox(str) Return str End Function End Class Public Class cA5 Inherits cA4 ' Die Klasse 'cA5' erbt die Standardeigenschaft von 'cA4', ' Die 'Beschattung' der geerbten Standard-Eigenschaft durch ' eine DEFAULT Property verhindert aber deren Aufruf und auch ' deren Weitervererbung ' Das Weglassen des Schlüsselworts 'Shadows' würde zu einer ' Warnung führen, wegen des Konflikts mit der aus 'cA4' ' geerbten Eigenschaft Default Overridable Shadows ReadOnly Property Testeigenschaft(ByVal x As Integer) As String Get Dim str As String str = "Standard-Eigenschaft der Klasse 'cA5'" + vbCrLf + _ "Default Overridable Shadows ReadOnly Property" MsgBox(str) Return str End Get End Property End Class Public Class cA6 ' Die Klasse 'cA6' erbt die Standard-Eigenschaft ' der Klasse 'cA5' und vererbt sie weiter ' Die 'private' Testeigenschaft erzeugt eine Warnung, weil ' sie die geerbte Standard-Eigenschaft implizit 'beschattet', ' trotzdem bleibt die Standard-Eigenschaft erhalten, weil ' das Schlüsselwort 'Private' eine Auflösung erlaubt, ' trotz gleicher Parameterliste Inherits cA5 Private ReadOnly Property Testeigenschaft(ByVal x As Integer) As String Get Dim str As String str = "Private Testeigenschaft in 'cA6'" + vbCrLf + _ "Private ReadOnly Property" MsgBox(str) Return str End Get End Property Public Function Demo1() As String ' Aufruf der privaten Eigenschaft Demo1 = Testeigenschaft(0) End Function Public Function Demo2() As String ' Auf die geerbte Eigenschaft kann auch durch ' Verwendung des Schlüsselworts 'MyBase' zugegriffen werden Demo2 = MyBase.Testeigenschaft(0) End Function End Class Public Class cA7 Inherits cA6 ' Die Klasse 'cA7' erbt die Standardeigenschaft der Klasse 'cA6' ' Da diese Standardeigenschaft in 'cA5' als 'Overridable' ' deklariert ist, kann sie hier überschrieben werden. ' Durch diese Überschreibung wird die Testeigenschaft ' der Klasse 'cA7' zur vererbbaren Default-Eigenschaft, ' obwohl sie nicht durch das Schlüsselwort DEFAULT ' deklariert worden ist Overrides ReadOnly Property Testeigenschaft(ByVal x As Integer) As String Get Dim str As String str = "überschriebene Eigenschaft der Klasse 'cA7' " + vbCrLf + _ "Overrides ReadOnly Property" MsgBox(str) Return str End Get End Property End Class Public Class cA8 ' Die Klasse 'cA8' erbt als Standard-Eigenschaft die ' in der Klasse 'cA7' überschriebene Eigenschaft Inherits cA7 End Class End Module ' ================================================================================== ' Ende Modul 'modDefaultProperty' ' ================================================================================== ' ============================================================================ ' Formular 'frmDemo' ' ============================================================================ Option Explicit On Option Strict On Public Class frmDemo ' Das Formular demonstriert die Auswirkungen des Weglassens des ' Schlüsselworts DEFAULT beim Überladen bzw. Überschatten der ' Standard-Eigenschaft einer Klasse ' VB.Net 2005 ' benötigt wird das Modul 'modDefaultProperty' Private Sub frmDemo_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Me.Show() ' Diese Klassen-Instanzen bilden eine Vererbungskette Dim a1 As New cA1 Dim a2 As New cA2 Dim a3 As New cA3 Dim a4 As New cA4 Dim a5 As New cA5 Dim a6 As New cA6 Dim a7 As New cA7 Dim a8 As New cA8 Dim str As String ' =========================================================== ' Aufruf der Testeigenschaft von a1 str = a1.TestEigenschaft(0) ' Die Standardeigenschaft der Instanz 'a1' ' ist geerbt von der Klasse 'cA' str = a1(0) ' =========================================================== ' Aufruf der parameterfreien Testeigenschaft von 'a2' str = a2.TestEigenschaft ' Die Standardeigenschaft der Instanz 'a2' ' ist weitervererbt von der Klasse 'cA1' str = a2(0) ' Bei namentlichem Aufruf wird nicht die geerbte Standard- ' eigenschaft, sondern die in der Klasse 'cA1' ' überladene Eigenschaft aufgerufen!! str = a2.TestEigenschaft(0) ' =========================================================== ' In der Klasse 'cA3' ist die geerbte Standardeigenschaft ' durch eine eigene Standardeigenschaft überladen str = a3(0) ' Namentlicher Aufruf der Default Property von 'a3' str = a3.TestEigenschaft(0) ' Aufruf der von 'a2' geerbten Eigenschaft ' mit abweichender Parameterliste str = a3.TestEigenschaft ' =========================================================== ' Die Instanz 'a4' erbt die in der Klasse 'cA3' überladene ' Standard-Eigenschaft str = a4(0) ' Der namentliche Aufruf der überschattenden Test-Eigenschaft ' der Klasse 'cA4'</font_ str = a4.Testeigenschaft(0) ' =========================================================== ' Die Instanz der Klasse 'cA5' besitzt eine eigene Standard- ' eigenschaft, die als 'Beschattung' der Methode aus 'cA4' ' deklariert worden ist</font str = a5(0) str = a5.Testeigenschaft(0) ' =========================================================== ' Die Instanz von 'cA6' erbt die Standard-Eigenschaft von 'cA5' ' und vererbt sie weiter str = a6(0) ' Zugriff auf die private 'Testeigenschaft' von 'a6' str = a6.Demo1() ' Zugriff auf die geerbte Standard-Eigenschaft von 'a6' str = a6.Demo2() ' ============================================================ ' Zugriff auf die in 'cA7' überschriebene ' Eigenschaft str = a7.Testeigenschaft(0) ' das Überschreiben einer Standard-Eigenschaft erzeugt eine ' neue Standard-Eigenschaft auch ohne das Schlüsselwort DEFAULT str = a7(0) ' ============================================================ ' die in 'cA7' überschriebene Eigenschaft wird als ' Standard-Eigenschaft weitervererbt str = a8(0) ' direkter Aufruf der von 'cA7' geerbten Standard-Eigenschaft str = a8.Testeigenschaft(0) ' indirekter Zugriff auf die vererbte private TestEigenschaft, ' deklariert in der Klasse 'cA6' str = a8.Demo1 End Sub End Class ' ============================================================================ ' Ende Formular 'frmDemo' ' ============================================================================ Dieser Tipp wurde bereits 11.934 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. |
sevOutBar 4.0 Vertikale Menüleisten á la Outlook Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |