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

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

MATLAB® оценивает значения свойства по умолчанию только однажды при загрузке класса. MATLAB не переоценивает присвоение каждый раз, когда вы создаете объект того класса. Если вы присваиваете объект как значение свойства по умолчанию в определении класса, MATLAB вызывает конструктора для того объекта только однажды при загрузке класса.

Примечание

Оценка значений свойства по умолчанию происходит только, когда значение сначала необходимо, и только однажды, когда MATLAB сначала инициализирует класс. MATLAB не переоценивает выражение каждый раз, когда вы создаете экземпляр класса.

Для получения дополнительной информации об оценке выражений, которые вы присваиваете как значения свойства по умолчанию, см. Когда MATLAB определяет значение выражения.

Присвоение Read-Only Properties, содержащей объекты

Когда класс задает свойство с частным или защищенным 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.

Похожие темы

Была ли эта тема полезной?