代码之家  ›  专栏  ›  技术社区  ›  Dabblernl

您如何处理VB6中缺少构造函数的问题?

  •  20
  • Dabblernl  · 技术社区  · 14 年前

    vb6类没有参数化构造函数。您为此选择了什么解决方案?使用工厂方法似乎是显而易见的选择,但让我吃惊!

    3 回复  |  直到 6 年前
        1
  •  6
  •   StayOnTarget    6 年前

    我通常坚持使用工厂方法,将相关类的“构造函数”放在同一个模块(.bas扩展名)中。遗憾的是,这远不是最佳的,因为您不能真正限制对vb6中正常对象创建的访问-您只需强调只通过工厂创建对象。

    更糟糕的是必须在实际对象和工厂方法之间跳转,因为IDE中的组织本身充其量是很麻烦的。

        2
  •  6
  •   Dirk Vollmar    14 年前

    如何使用可用的类初始值设定项?这类似于无参数构造函数:

    Private Sub Class_Initialize()
        ' do initialization here
    
    End Sub
    
        3
  •  6
  •   Community datashaman    7 年前

    我混合使用工厂函数(在父类中),然后创建对象的实例并调用朋友 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
    

    等级 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
    

    我知道 Friend 范围在项目中不会有任何影响,但它作为一个警告,这是仅供内部使用的。 如果这些对象通过COM公开,则 Init 无法调用方法,并将类设置为 PublicNotCreatable stops it being created .