Страницы: 1
RSS
vba Создать объект где все свойства только для чтения, где свойства Class1 есть экземпляры Class2
 
Здравствуйте.
Посоветуйте, пожалуйста, в следующем.

Есть Class1, в нём определено свойство. Это свойство является экземпляром Class2.
В Class2 также определено свойство, но оно только для чтения.
Я не могу понять, как можно при создании экземпляра Class1 задать значение для свойства из Class2, при условии, что значение для свойства Class2 известно только на этапе создания объекта от Class1.

Для чего это: я хочу собрать объект, где все данные определены в момент инициализации и больше не должны изменяться извне - объект для просмотра только (ну за исключением пары методов).

Я вымучил только через глобальную переменную, поднося на лопате в момент new. Но это ужасно коряво и не годится для большого кол-ва свойств, как можно сделать нормально? Может оставить Property Let, но после создания объекта как-то блокировать попытки записи, вполне сгодилось бы, но как это реализовать?
 
Цитата
vladjuha написал: после создания объекта как-то блокировать попытки записи
Можно так:
Код
' Class1
Private a_ As Class2
Public Property Get a() As Class2
  Set a = a_
End Property
Private Sub Class_Initialize()
  Set a_ = New Class2
  a_.Init Now
End Sub

Код
' Class2
Private b_ As Date
Public Property Get b() As Date
  b = b_
End Property
Friend Sub Init(a)
  If b_ = 0 Then b_ = a
End Sub
 
Ах вот для чего нужен это Friend, читал же недавно и не вник.
Спасибо, как всегда!
 
В общем-то, здесь и Public сойдет вместо Friend. Просог Friend уменьшает немного зону видимости. Смысл предложения в однократном задании значения. В качестве флага проведенной инициализации можно было бы задать значение True какой-нибудь логической переменной в Class2
Страницы: 1
Наверх