Управление аспектами определений свойств осуществляется следующими способами:
Укажите значение по умолчанию для каждого свойства по отдельности, см. раздел Значения по умолчанию для свойства.
Назначение значений свойств в конструкторе класса см. в разделе Назначение значений свойств в конструкторе.
Определите свойства с постоянными значениями, см. раздел Именованные значения.
Назначение значений атрибутов свойств для каждого блока см. в разделе Атрибуты свойств.
Определение методов, выполняемых при установке или запросе свойства, см. в разделах Методы установки и получение значений свойств.
Определите класс и размер значений свойств, см. раздел Проверка значений свойств.
Определите свойства, в которых не хранятся значения, но значения которых зависят от других свойств, см. раздел Типы свойств.
Примечание
Свойства не могут иметь то же имя, что и класс.
Примечание
Всегда используйте имена свойств с учетом регистра в коде 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