, , . OOP VBA, , , ( ) , -. , :
, MyClass ( "C" , "MyClass", .)
, , - , , MyClass, . , IMyClass:
Public Function calcSomething()
End Function
Public Function equal(cinst As IMyClass) As Boolean
End Function
MyClass, :
Implements IMyClass
Private hidden1_ As Double
Private hidden2_ As Double
Public Sub init(h1 As Double, h2 As Double)
hidden1_ = h1
hidden2_ = h2
End Sub
Public Function equalDef(hidden1 As Double, hidden2 As Double) As Boolean
equalDef = (hidden1_ = hidden1 And hidden2_ = hidden2)
End Function
Private Function IMyClass_calcSomething() As Variant
IMyClass_calcSomething = hidden1_ * hidden2_
End Function
Private Function IMyClass_equal(cinst As IMyClass) As Boolean
If TypeOf cinst Is MyClass Then
Dim asMyClass As MyClass
Set asMyClass = cinst
IMyClass_equal = asMyClass.equalDef(hidden1_, hidden2_)
End If
End Function
- , :
Public Function mkMyClass(h1 As Double, h2 As Double) As IMyClass
Dim ret As MyClass
Set ret = New MyClass
Call ret.init(h1, h2)
Set mkMyClass = ret
End Function
Public Sub useMyClass()
Dim mc1 As IMyClass
Set mc1 = mkMyClass(42, 99)
Dim mc2 As IMyClass
Set mc2 = mkMyClass(42, 99)
Dim mc3 As IMyClass
Set mc3 = mkMyClass(99, 42)
Debug.Print mc1.calcSomething
Debug.Print mc1.equal(mc2)
Debug.Print mc3.calcSomething
Debug.Print mc3.equal(mc2)
End Sub
"useMyClass" , mc1, mc2 mc3 "init" "equalDef" MyClass. "calcSomething" "equal", .
, , , . , " VBA - PITA (TM)"...
stackoverflow:
VBA,
/ VBA?