exponenta event banner

Определение свойства

Что можно определить

Управление аспектами определений свойств осуществляется следующими способами:

Примечание

Свойства не могут иметь то же имя, что и класс.

Примечание

Всегда используйте имена свойств с учетом регистра в коде MATLAB ® .

Инициализация значений свойств

Существует два основных подхода к инициализации значений свойств:

  • В определении свойства - MATLAB вычисляет выражение только один раз и присваивает одно и то же значение свойству каждого экземпляра.

  • В конструкторе класса - MATLAB вычисляет выражение назначения для каждого экземпляра, что гарантирует, что каждый экземпляр имеет уникальное значение.

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

Значения по умолчанию для свойства

В пределах properties можно управлять значением по умолчанию для отдельного свойства. Назначьте значения по умолчанию в качестве значения или выражений MATLAB. Выражения не могут ссылаться на переменные. Например:

  • Prop1 - Назначение пусто [] значение по умолчанию

  • Prop2 - Назначение символьного массива в качестве значения по умолчанию

  • Prop3 - Назначение результата выражения значением по умолчанию

  • Prop4 - Назначить пустой datetime объект в Prop4

  • Prop5 - назначение значения по умолчанию, удовлетворяющего указанным ограничениям скалярного положительного двойника.

classdef ClassName
   properties
      Prop1
      Prop2 = 'some text'
      Prop3 = sin(pi/12)
      Prop4 = datetime.empty 
      Prop5 (1,1) double {mustBePositive} = 1
   end
end

Если в определении класса не указано значение свойства по умолчанию, MATLAB инициализирует значение свойства на пустое double ([]). Если класс задает какие-либо ограничения класса, размера или функции проверки для значения свойства, то класс должен убедиться, что значение по умолчанию удовлетворяет этим ограничениям, назначив допустимое значение, если пустое значение недопустимо.

Примечание

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

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

Сведения о функциях класса, размера и проверки, используемых в определениях свойств, см. в разделе Проверка значений свойств.

Инициализация свойств для обработки объектов

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

Если требуется инициализировать значение свойства новому экземпляру объекта-дескриптора при каждом создании объекта класса, назначьте значение свойства в конструкторе.

Назначение значений свойств в конструкторе

Чтобы назначить значения свойству из конструктора класса, обратитесь к объекту, возвращаемому конструктором (выходная переменная obj) и имя свойства с использованием точечной нотации:

classdef MyClass
   properties
      Prop1
   end
   methods
      function obj = MyClass(intval)
         % Initialize Prop1 for each instance
         obj.Prop1 = intval;
      end
   end
end

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

Например, предположим, что каждый раз при создании одного из других объектов свойству другого объекта требуется назначить уникальный объект-дескриптор. Назначьте объект дескриптора свойству в конструкторе. Вызовите конструктор объекта дескриптора, чтобы создать уникальный объект дескриптора для каждого экземпляра класса.

classdef ContainsHandle
   properties
       Prop1
   end
   methods
       function obj = ContainsHandle(keySet,valueSet)
           obj.Prop1 = MyHandleClass(keySet,valueSet);
       end
   end
end

Дополнительные сведения о методах конструктора см. в разделе Ссылка на объект в конструкторе.

Значения по умолчанию, вычисленные перед построением объекта

MATLAB проверяет значения свойств по умолчанию перед назначением значений в конструкторе. Это необходимо для значения по умолчанию, присвоенного в properties и значение свойства, установленное в конструкторе класса для соответствия указанной проверке. Например, этот класс ограничивает Prop скалярному положительному двойнику, но не присваивает допустимое значение по умолчанию. По умолчанию MATLAB назначает пустое двойное значение по умолчанию, что приводит к ошибке во время выполнения.

classdef PropInit
    properties
        % Error without valid default value
        Prop (1,1) double {mustBePositive} 
        % Empty default fails mustBePositive
    end
    methods
        function obj = PropInit(positiveInput)
            obj.Prop = positiveInput;
        end
    end
end

Вызов конструктора класса с допустимым значением для Prop приводит к ошибке из функции проверки mustBePositive.

obj = PropInit(2);
Error using implicit default value of property 'Prop' of class 'PropInit':
Value must be positive.

Атрибуты свойства

Все свойства имеют атрибуты, изменяющие определенные аспекты поведения свойства. Указанные атрибуты применяются ко всем свойствам в конкретном блоке свойств. Например:

classdef ClassName
   properties (PropertyAttribute = value)
      Prop1
      Prop2
   end
end

Например, только методы в одном определении класса могут изменять и запрашивать Salary и Password свойства.

classdef EmployeeInfo
   properties (Access = private)
      Salary
      Password
   end
end

Это ограничение существует, поскольку класс определяет эти свойства в properties блок с Access атрибут имеет значение private.

Атрибуты свойства

Описание атрибутов свойств, которые можно указать, см. в разделе Атрибуты свойств.

Методы установки и получения значений свойств

MATLAB вызывает каждый раз при установке или запросе значения свойства. Определение доступа к набору свойств или получение методов доступа в methods блоки, которые не указывают атрибуты и имеют следующий синтаксис:

methods

   function obj = set.PropertyName(obj,value)
      ...
   end

   function value = get.PropertyName(obj)
      ...
   end

end

Дополнительные сведения о синтаксисе метода доступа см. в разделе Методы получения свойств и методы набора свойств.

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

Например, set.Password метод проверяет длину символьного массива, назначенного свойству с именем Password. Если в значении, назначенном свойству, меньше семи символов, MATLAB возвращает ошибку. В противном случае MATLAB присваивает свойству указанное значение.

function obj = set.Password(obj,pw)
   if numel(pw) < 7
      error('Password must have at least 7 characters')
   else
      obj.Password = pw;
end

Дополнительные сведения о методах доступа к свойствам см. в разделе Методы доступа к свойствам.

Свойства ссылочного объекта с использованием переменных

MATLAB может разрешить имя свойства из char переменная с использованием выражения формы:

object.(PropertyNameVar)

где PropertyNameVar - переменная, содержащая имя допустимого свойства объекта. Этот синтаксис используется при передаче имен свойств в качестве аргументов. Например, функция getPropValue возвращает значение KeyType свойство:

PropName = 'KeyType';
function o = getPropValue(obj,PropName)
   o = obj.(PropName);
end

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