Несколько конструкторов в VB6? - PullRequest
6 голосов
/ 17 марта 2011

Возможно ли иметь несколько конструкторов в vb6? Причина, по которой я спрашиваю, состоит в том, что я вижу инициализацию класса, но я не знаю, могу ли я вставить 0 или более параметров в конструктор или если class_initialize является конструктором, и он может принимать любое количество параметров. Это сбивает с толку, главным образом потому, что я настолько знаком с c #, что переход на vb6 вызывает недоумение в отношении классов.

Ответы [ 2 ]

11 голосов
/ 17 марта 2011

Class_Initialize - это событие, которое всегда вызывается, как только создается экземпляр класса. Это на самом деле не сравнимо с конструктором C #.

Например, обратите внимание, что Class_Initialize создан как Private, тогда как класс C # с закрытым конструктором не может быть создан.

Несмотря на то, что вы можете изменить событие VB6 Class_Initialize с Private на Public, особого смысла не будет: поскольку событие все равно вызывается при создании экземпляра, почему вы хотите вызвать его явно во второй раз? (Если вы это сделали, было бы лучше иметь открытый метод, который вызывается из события Class_Initialize.)

Вы не можете добавить параметры к событию VB6 Class_Initialize, даже Optional. Попытка сделать это приведет к ошибке компиляции.

Лучшее, что вы можете сделать, - это запустить свой собственный метод Initialize с указанием требуемого параметра, который должен быть явно вызван, возможно, и иметь внутреннюю переменную состояния isInitialized, чтобы гарантировать, что класс не используется, пока Initialize метод был вызван. Также рассмотрим «фабричный» подход: классы, которые являются PublicNotCreatable с Friend Initialize методами, вызываемыми фабрикой и предназначенными для вызывающих, подходящих инициализированных.

2 голосов
/ 17 марта 2011

В VB6 вы можете указать параметры метода как optional.Это означает, что вам не нужно указывать их при вызове функции.Если они не указаны, в сигнатуре метода указывается значение по умолчанию.

Пример из здесь :

Private Sub Draw(Optional X As Single = 720, Optional Y As Single = 2880)
    Cls
    Circle (X, Y), 700
End Sub

Это может быть вызвано:

Draw 'OR
Draw 100 'OR
Draw 200, 200

Редактировать
Вы можете даже использовать необязательные и обычные параметры вместе, хотя я думаю, что вам, возможно, придется поставить дополнительные в конце.

...