Свойства, содержащие объекты

Назначение объектов значениям свойств по умолчанию

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.

Похожие темы