VBA: Gibt es sowas wie Abstract Class?

7

Ich verwende eine Schnittstelle, um sicherzustellen, dass einige ähnliche Klassen einige obligatorische Methoden (Subs / Funktionen) implementieren.

Beispiel:

  • Schnittstelle I1 deklariert M1 und M2 Methoden
  • C1 und C2 implementieren I1 und haben ihre eigenen Versionen für M1 und M2.

C1 und C2 benötigen ebenfalls genau die gleichen Methoden, zum Beispiel die Methoden SM1 und SM2.

Um die Wiederholung von SM1 und SM2 zu vermeiden, möchte ich eine abstrakte Klasse AC definieren:

  • Umsetzung von I1
  • definiert SM1 und SM2.

welches um C1 und C2 erweitert würde

Diese Lösung ist zwar in Java möglich, aber ich finde keine Dokumentation, um das in VBA zu machen. (VB.Net scheint abstrakte Klassen mit dem Schlüsselwort MustInherit zuzulassen.)

Jede Bestätigung, die in VBA möglich ist oder nicht?

    
mins 19.01.2014, 17:43
quelle

2 Antworten

11

Es gibt keine Vererbung in VBA.

Sie können eine Schnittstelle definieren, und Sie können sie in einer Klasse implementieren, indem Sie das Schlüsselwort Implements verwenden. Wenn Sie jedoch eine gemeinsam von einer Basisklasse vordefinierte Funktionalität wünschen, müssen Sie den Kopier-Einfüge-Ansatz verwenden.

Weiterführende Literatur:
Verwendung der Tools in Excel VBA
Wie vergleichende Methoden zwischen Klassenobjekt-Modulen in VBA in ähnlicher Weise wie VB.NET verwendet werden?

    
GSerg 19.01.2014, 17:52
quelle
8

Sie könnten Semi-Decorator :-) Pattern in VBA implementieren. Sagen wir, wir haben eine Basisklasse und zwei untergeordnete Klassen. Wenn Sie das Schlüsselwort Implements in untergeordneten Klassen verwenden, wird sichergestellt, dass untergeordnete Klassen dieselbe Schnittstelle wie die Basisklasse haben und gleichzeitig eine private Instanz der Basisklasse in jeder untergeordneten Klasse deklarieren und Aufrufe von untergeordneten in die Basisklasse umleiten.

Hinweis: Basisklasse ist hier normale Klasse, Sie können immer noch Instanzen davon erstellen (also keine echte abstrakte Klasse).

Beispiel:

%Vor%

    
dee 19.01.2014 22:01
quelle