Как вы справились с отсутствием конструкторов в VB6? - PullRequest
21 голосов
/ 01 августа 2010

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

Ответы [ 3 ]

7 голосов
/ 01 августа 2010

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

Хуже всего то, что приходится прыгать между фактическим объектом и фабричным методом, поскольку организация в самой IDE в лучшем случае громоздка.

6 голосов
/ 28 февраля 2013

Я использую сочетание фабричных функций (в родительских классах), которые затем создают экземпляр объекта и вызывают метод Friend Init().

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

6 голосов
/ 01 августа 2010

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

Private Sub Class_Initialize()
    ' do initialization here

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...