Thema Datum  Von Nutzer Rating
Antwort
28.11.2016 15:24:21 rodgerwilco
NotSolved
Blau Klassenmodule und Vererbung
28.11.2016 19:08:43 BigBen
NotSolved

Ansicht des Beitrags:
Von:
BigBen
Datum:
28.11.2016 19:08:43
Views:
1661
Rating: Antwort:
  Ja
Thema:
Klassenmodule und Vererbung

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


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
28.11.2016 15:24:21 rodgerwilco
NotSolved
Blau Klassenmodule und Vererbung
28.11.2016 19:08:43 BigBen
NotSolved