No. Non sono derivati dalla classe Control
. Implementano la definizione/i metodi e le firme delle proprietà di Control
. Gli operatori TypeOf
e Is
lavorano sono controllano se l'istanza di una classe implementa una delle 3 categorie (elencate di seguito).
aprire una cartella di lavoro nuova
Vai a VBE e aggiungere
un modulo di classe e denominarlo: MyClass
nella visualizzazione solo codice aggiungere Implements MyInterface
un modulo di classe e denominarlo: MyInterface
nella visualizzazione di codice - non fanno nulla/lasciare vuoto
un modulo e copia incolla il codice qui sotto ed eseguirlo
Sub Main()
Dim cls As MyClass
Set cls = New MyClass
Debug.Print TypeOf cls Is MyClass
Debug.Print TypeOf cls Is MyInterface
End Sub
Il risultato può essere sorprendente
True
True
cls
variabile è di due tipi - MyClass
e MyInterface
come si può vedere cls
non eredita nulla MyInterface
ma la definizione. Quando si utilizza TypeOf
e Is
in realtà è vero perché MyClass
implementa MyInterface
. Non perché è derivato dalla classe MyInterface
ma perché è implementa.
Ora, supponiamo
result = TypeOf objectexpression Is typename
L'operatore TypeOf
determina se il tipo di runtime di variabile è compatibile con typename. La compatibilità dipende dalla categoria di tipo typename.Ci sono tre categorie
Classeobjectexpression è di tipo typename o eredita da typename
Strutturaobjectexpression è di tipo typename
interfacciaobjectexpression implementa typename o eredita da una classe che implementatypename
In particolare cercare di capire il 3 ° categoria - Interface.
Credo che a questo punto si dovrebbe davvero capire perché TypeOf varName Is varType
mostra True
per la TextBox
e ListBox
...
Quando si esegue l'ereditarietà VBA, è possibile utilizzare solo Implementa parola chiave per implementa una classe definizione. Cioè, la classe da implementare è equivalente alla classe astratta di C++/C#: ha solo la proprietà/metodo definizione.
Generalmente, il tuo esempio non è una forma di un polimorfismo di classe. Il polimorfismo di classe si verifica quando si sta effettivamente derivando un'istanza da uno a un altro. Questo non è il caso. Anche se TextBox
e ListBox
sono entrambi di tipo Control
, in realtà non derivano dalla classe Control
. Nota: possono anche essere membri di un'altra raccolta - sarebbero TypeOf
più in alto nel tipo di gerarchia oggetto (moduli, anche Componente e IComponente perché le Forme implementano quello).