Dab*_*rnl 21 vb6 constructor class
VB6类没有参数化构造函数.你为此选择了什么解决方案?使用工厂方法似乎是明显的选择,但让我感到惊讶!
我通常坚持使用工厂方法,在那里我将相关类的"构造函数"放在同一个模块中(.BAS扩展名).遗憾的是,这远非最佳,因为您无法真正限制对VB6中正常对象创建的访问 - 您只需要指出只通过工厂创建对象.
更糟糕的是必须在实际对象和工厂方法之间跳转,因为IDE本身的组织充其量是繁琐的.
如何使用可用的类初始化程序?这表现得像无参数构造函数:
Private Sub Class_Initialize()
' do initialization here
End Sub
Run Code Online (Sandbox Code Playgroud)
我使用混合的工厂函数(在父类中),然后创建对象的实例并调用Friend Init()
方法.
课程CObjects
:
Public Function Add(ByVal Param1 As String, ByVal Param2 As Long) As CObject
Dim Obj As CObject
Set Obj = New CObject
Obj.Init Param1, Param2
Set Add = Obj
End Function
Run Code Online (Sandbox Code Playgroud)
课程CObject
:
Friend Sub Init(ByVal Param1 As String, ByVal Param2 As Long)
If Param1 = "" Then Err.Raise 123, , "Param1 not set"
If Param2 < 0 Or Param2 > 15 Then Err.Raise 124, , "Param2 out of range"
'Init object state here
End Sub
Run Code Online (Sandbox Code Playgroud)
我知道Friend
范围不会对项目产生任何影响,但它会作为警告,仅供内部使用.如果通过COM公开这些对象,则Init
无法调用该方法,并将该类设置为PublicNotCreatable
停止创建它.