Hallo,
falls mit richtiger Vererbung dieses Schemata gemeint ist ... https://msdn.microsoft.com/de-de/library/5x4yd9d5(v=vs.90).aspx
... muss ich leider mitteilen, dass das in VBA nicht möglich ist.
VBA selbst ist keine Objektorientierte Sprache im Klassischen Sinne. Man kann zwar schon einzelne Klassen definieren. Diese sind allerdings von überall aus zugreifbar.
Es ist nicht möglich, eine Klasse in eine andere Klasse zu kapseln. Daher fehlen auch überschribungs-Operatoren wie "Overrides".
Um eine Klasse vererben zu können , muss in der abgeleiteten Klasse alle Objekte nochmals definieren bzw. die Aufrufe weiterleiten.
Bei einer Änderung der Parameter müssen dann wiederum alle anderen Klassen, die auf das geänderte Objekt zugreifen, angepasst werden.
Beispiel:
Klasse clsValue:
Option Explicit
Dim myValue1 As String
Public Property Get Value1() As String
Value1 = myValue1
End Property
Public Property Let Value1(value As String)
myValue1 = value
End Property
Public Function IsEmptyValue1() As Boolean
IsEmptyValue1 = CBool(myValue1 = "")
End Function
Klasse clsValues:
Option Explicit
Public myValue1 As New clsvalue
Public myValue2 As New clsvalue
Public bVal As Boolean
Modul:
Sub Test()
Dim myClass As New clsValues
Debug.Print myClass.myValue1.IsEmptyValue1
End Sub
Bei diesem kleinen Beispiel wird die Funtion "IsEmptyValue1" über die Klasse clsValues aufgerufen, obwohl diese in der Klasse clsValue enthalten ist.
Bei dieser Vorgehensweise handelt es sich in meinen Augen nicht im eine Vererbung, da der Aufruf selbst über die myValue1 durchgereicht wird.
Falls die "Vererbung" über mehrere Ebenen geschieht, wird der Aufruf selbst immer länger.
Weiteres Beispiel Klasse clsValues:
Option Explicit
Private myValue1 As New clsvalue
Private myValue2 As New clsvalue
Public bVal As Boolean
Public Property Get Value1() As String
Value1 = myValue1.Value1
End Property
Public Property Let Value1(value As String)
myValue1.Value1 = value
End Property
Public Property Get Value2() As String
Value2 = myValue2.Value1
End Property
Public Property Let Value2(value As String)
myValue2.Value1 = value
End Property
Public Function IsEmptyValue1() As Boolean
IsEmptyValue1 = myValue1.IsEmptyValue1
End Function
Public Function IsEmptyValue2() As Boolean
IsEmptyValue2 = myValue2.IsEmptyValue1
End Function
Modul:
Sub Test()
Dim myClass As New clsValues
Debug.Print myClass.IsEmptyValue1
End Sub
Bei diesem Modell kann man im weitesten Sinne von einer Vererbung reden, da die Funktion IsEmptyValue1 ja in der Klasse clsValue verbleibt und in der Klasse clsValues nur durchgereicht wird.
Aber richtige Vererbung schaut anders aus.
Vielleicht helfen Dir ja die einen oder anderen Informationen weiter?
LG, BigBen
|