Управляйте аспектами определений свойства следующими способами:
Задайте значение по умолчанию для каждого свойства индивидуально, смотрите Значения свойства по умолчанию.
Присвойте значения свойств в конструкторе класса, смотрите Значения свойств Присвоения в Конструкторе.
Задайте свойства с постоянными значениями, смотрите Названные Значения.
Присвойте значения атрибута свойства на на основание блока, см. Атрибуты свойств.
Задайте методы, которые выполняются, когда свойство установлено или запрошено, см. Методы доступа к свойствам.
Задайте класс и размер значений свойств, см. Проверку значений свойств.
Задайте свойства, которые не хранят значения, но чьи значения зависят от других свойств, смотрите Типы Свойств.
Свойства не могут иметь того же имени как класс.
Всегда используйте чувствительные к регистру имена свойства в своем коде MATLAB®.
Существует два основных подхода для инициализации значений свойств:
В определении свойства — MATLAB выполняет выражение только однажды и присваивает то же значение свойству каждого экземпляра.
В конструкторе класса — MATLAB оценивает выражение присваивания для каждого экземпляра, который гарантирует, что каждый экземпляр имеет уникальное значение.
Для получения дополнительной информации об оценке выражений, которые вы присваиваете как значения свойства по умолчанию, см. Когда MATLAB определяет значение выражения.
В properties
блокируйтесь, можно управлять значением по умолчанию отдельного свойства. Присвойте значения по умолчанию как выражения MATLAB или значение. Выражения не могут сослаться на переменные. Например:
Prop1
— Никакое присвоение не приводит к пустому []
значение по умолчанию
Prop2
— Присвойте символьный массив как значение по умолчанию
Prop3
— Присвойте результат выражения как значение по умолчанию
Prop4
— Присвойте тот же экземпляр класса Handle к Prop4
для всех экземпляров этого класса
Prop5
— Присвойте значение по умолчанию, которое удовлетворяет заданным ограничениям скаляра, положительного дважды.
classdef ClassName properties Prop1 Prop2 = 'some text' Prop3 = sin(pi/12) Prop4 = containers.Map 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
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