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