相关疑难解决方法(0)

VBA继承模式

VBA是基于COM的,COM不进行继承.但我想我可能有一个模式,它近似于它的某些方面:

Animal.cls

Public Sub Speak() 
    Err.Raise 418, , "Not supported" 
End Sub 
Run Code Online (Sandbox Code Playgroud)

Dog.cls

Implements Animal 

Private mBase As Animal 

Private Sub Class_Initialize() 
  Set mBase = New Animal 
End Sub 

Private Sub Animal_Speak() 
   Me.Speak 
End Sub 

Public Sub Speak() 
   MsgBox "Woof!" 
End Sub 

Public Property Get Base() As Animal 
    Set Base = mBase 
End Property 
Run Code Online (Sandbox Code Playgroud)

Test.bas

Sub Test() 
    Dim animal As animal: Set animal = New dog 
    Dim dog As dog: Set dog = New dog 
    Dim object As Object: Set …
Run Code Online (Sandbox Code Playgroud)

vba

12
推荐指数
1
解决办法
1375
查看次数

如何实现灵活的对象组成?

问题背后的动机

我一直在学习如何使用串联继承在Javascript中进行对象组合,并且想知道如何在VBA(不具有继承)中完成类似的工作。

对象组成:我试图弄清楚如何实现“具有”关系与“是”关系。我希望能够编写简单的行为类,将它们组合在一起以构成更复杂的类,从而可以在其中使用它们。

我创建了一个简单的示例来演示我想要完成的工作。


用例范例

测试模块

以下是一些可能使用的示例。不过,对于这个问题,我将只关注Fighter类的示例用法。

Fight方法实际上是FightCanFight类中调用该方法。它调试一条消息并将耐力降低1。

'MOST EXCITING GAME OF ALL TIME! =)
Private Sub StartGame()

    Dim Slasher As Fighter
    Set Slasher = New Fighter
    Slasher.Name = "Slasher"

    Slasher.Fight '-> Slasher slashes at the foe!
    Debug.Print Slasher.Stamina '-> 99

    'MAGES CAN ONLY CAST (ONLY HAS MANA)
    Dim Scorcher As Mage
    Set Scorcher = New Mage
    Scorcher.Name = "Scorcher"
    Scorcher.Cast "fireball" '->Scorcher …
Run Code Online (Sandbox Code Playgroud)

oop vba design-patterns dependency-injection

6
推荐指数
1
解决办法
356
查看次数

标签 统计

vba ×2

dependency-injection ×1

design-patterns ×1

oop ×1