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