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