MATLAB ® оценивает значения свойств по умолчанию только один раз при загрузке класса. MATLAB не выполняет переоценку присвоения при каждом создании объекта этого класса. При назначении объекта в качестве значения свойства по умолчанию в определении класса MATLAB вызывает конструктор для этого объекта только один раз при загрузке класса.
Примечание
Оценка значений свойства по умолчанию выполняется только тогда, когда значение необходимо сначала, и только один раз, когда MATLAB инициализирует класс. MATLAB не пересматривает выражение при каждом создании экземпляра класса.
Дополнительные сведения об вычислении выражений, назначенных в качестве значений по умолчанию свойств, см. в разделе Когда MATLAB вычисляет выражения.
Когда класс определяет свойство с частным или защищенным SetAccess, и это свойство содержит объект, который сам имеет свойства, поведение назначения зависит от того, содержит ли свойство дескриптор или объект значения:
Объект-дескриптор - можно задать свойства для объектов-дескрипторов, содержащихся в свойствах только для чтения
Объект Value - невозможно задать свойства для объекта value, содержащегося в свойствах, доступных только для чтения.
Эти классы иллюстрируют поведение назначения:
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.