Подтвердить что ты не робот

Как вы имели дело с отсутствием конструкторов в VB6?

Модули класса VB6 не имеют параметризованных конструкторов. Какое решение вы выбрали для этого? Использование факультативных методов кажется очевидным выбором, но удивите меня!

4b9b3361

Ответ 1

Я обычно придерживаюсь методов factory, где я помещаю "конструкторы" для связанных классов в один и тот же модуль (расширение .BAS). К сожалению, это далеко не оптимально, так как вы не можете ограничить доступ к созданию обычного объекта в VB6 - вам просто нужно сделать только создание ваших объектов через factory. Хуже то, что вам приходится прыгать между фактическим объектом и вашим методом factory, поскольку организация в самой IDE в лучшем случае громоздка.

Ответ 2

Как использовать доступный инициализатор класса? Это ведет себя как конструктор без параметров:

Private Sub Class_Initialize()
    ' do initialization here

End Sub

Ответ 3

Я использую сочетание функций factory (в родительских классах), которые затем создают экземпляр объекта и вызывают метод 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

Класс 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 останавливает его создание.