Постоянная внутри класса
Вопрос
Я пытался создать класс сценариев VB с постоянным и получил ошибку 800A03EA.Это ошибка VBS?Разве это не фундаментальное правило ООП?
Class customer
' comment it const and its works
const MAX_LEN=70
Private Name
Private Sub Class_Initialize
Name = ""
End Sub
' name property.
Public Property Get getName
getName = Name
End Property
Public Property Let letName(p_name)
Name = p_name
End Property
end class
. Решение
the Документация Перечисляет все заявления, которые разрешены в контексте классов.Генеракодицетагкод не среди них, поэтому он не поддерживается.Вы можете работать по всему вопросу, используя частные переменные участника, которые вы инициализируете во время мнения (I.E. в Const
):
Class customer
Private MAX_LEN
Private Name
Private Sub Class_Initialize
MAX_LEN = 70
Name = ""
End Sub
...
End Class
.
Class customer
Private MAX_LEN
Private Sub Class_Initialize
MAX_LEN = 70
End Sub
'read-only property, so no "Property Let/Set"
Public Property Get MaxLength
MaxLength = MAX_LEN
End Property
...
End Class
.
Однако, как Ekkehard.horner правильно указал, значение все еще может быть изменено по объектному внутреннему коду.Если неизменность является основным требованием для этого значения, вы должны реализовать его как глобальную константу.
Другие советы
Я согласен с ansgar wiechers s Ответ , но хотел бы предложить другой вариант.
Если неизменность важнее производительности, вы можете привести значение непосредственно в Get и используйте свойство, чтобы обратиться к значению вместо переменной классов.
Class customer
'read-only property, so no "Property Let/Set"
Public Property Get MaxLength
MaxLength = 70
End Property
...
End Class
. Частная переменная (возможно, с Getter) дает вам значение, которое является только для чтения из внешней стороны класса, но класс внутреннего кода все еще может изменять это значение.
Так что с помощью глобального const (возможно, с именем имени «имен») может быть лучшим обходным отделением в случаях, когда постоянная связь является наиболее важным.