MATLAB® оценивает значения свойства по умолчанию только один раз при загрузке класса. MATLAB не выполняет переоценку назначения при каждом создании объекта этого класса. Если вы назначаете объект как значение свойства по умолчанию в определении класса, MATLAB вызывает конструктор для этого объекта только один раз при загрузке класса.
Примечание
Оценка значений свойства по умолчанию происходит только тогда, когда значение сначала необходимо, и только один раз, когда MATLAB впервые инициализирует класс. MATLAB не переоценивает выражение при каждом создании образца класса.
Для получения дополнительной информации об оценке выражений, которые вы присваиваете как значения свойства по умолчанию, см. Когда MATLAB определяет значение выражения.
Когда класс задает свойство с частным или защищенным SetAccess
, и это свойство содержит объект, который сам имеет свойства, поведение назначения зависит от того, содержит ли свойство указатель или объект значения:
Объект указатель - можно задать свойства объектов указатель, содержащихся в свойствах только для чтения
Объект ценности - вы не можете задать свойства объекта значения, содержащегося в свойствах только для чтения.
Эти классы иллюстрируют поведение назначения:
ReadOnlyProps
- класс с двумя свойствами только для чтения. Конструктор классов присваивает указатель объекта типа HanClass
на PropHandle
свойство и объект значения типа ValClass
на PropValue
свойство.
HanClass
- обработайте класс с общественной собственностью
ValClass
- класс значения с общественной собственностью
classdef ReadOnlyProps properties(SetAccess = private) PropHandle PropValue end methods function obj = ReadOnlyProps obj.PropHandle = HanClass; obj.PropValue = ValClass; end end end classdef HanClass < handle properties Hprop end end classdef ValClass properties Vprop end end
Создайте образец ReadOnlyProps
класс:
a = ReadOnlyProps
a = ReadOnlyProps with properties: PropHandle: [1x1 HanClass] PropValue: [1x1 ValClass]
Используйте частную PropHandle
свойство, чтобы задать свойство HanClass
объект, который он содержит:
class(a.PropHandle.Hprop)
ans = double
a.PropHandle.Hprop = 7;
Попытка назначить свойство объекта класса значения не разрешена:
a.PropValue.Vprop = 11;
You cannot set the read-only property 'PropValue' of ReadOnlyProps.