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

Что можно задать

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

Примечание

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

Примечание

Всегда используйте чувствительные к регистру имена свойства в своем 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 загружает определение класса. Если вы используете конструктора класса Handle, чтобы создать значение свойства по умолчанию, MATLAB вызывает конструктора только, когда класс сначала используется, и затем использует тот же указатель на объект в качестве значения по умолчанию для свойства во всех созданных объектах. Поскольку все указатели на объект ссылаются на тот же объект, любые изменения, которые вы делаете к объекту указателя в одном экземпляре, внесены в объект указателя во всех экземплярах.

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

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

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

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

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

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

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

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

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

Похожие темы