exponenta event banner

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

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

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.

Связанные темы