Некоторые объекты MATLAB®, такие как графические объекты, реализуют интерфейс на основе set и get функции. Эти функции включают доступ к нескольким свойствам на массивах объектов в одном вызове функции.
Можно добавить set и get функциональность к вашему классу путем получения из одного из этих классов:
matlab.mixin.SetGet — использование, когда это необходимо, поддерживает для нечувствительного к регистру, частичного соответствия имени свойства. Получение из matlab.mixin.SetGet не влияет на точное имя свойства, требуемое при помощи ссылки записи через точку на свойства.
matlab.mixin.SetGetExactNames — используйте, когда это необходимо, чтобы поддержать только чувствительное к регистру полное соответствие имени свойства.
set и get методы, упомянутые в этом разделе, отличаются от доступа к набору свойств, и свойство получают методы доступа. См. Методы доступа к свойствам для получения информации о методах доступа свойства.
Используйте абстрактный класс matlab.mixin.SetGet или matlab.mixin.SetGetExactNames как суперкласс:
classdef MyClass < matlab.mixin.SetGet ... end
Поскольку matlab.mixin.SetGet и matlab.mixin.SetGetExactNames выведите из handle класс, вашим подклассом является также handle класс.
get метод возвращает значение свойства объекта с помощью указателя на объект и имени свойства. Например, примите H указатель на объект:
v = get(H,'PropertyName');Если вы задаете массив указателей с одним именем свойства, get возвращает значение свойства для каждого объекта как массив ячеек значений:
CV = get(H,'PropertyName');CV массив всегда является столбцом независимо от формы H.
Если вы задаете массив ячеек char векторные имена свойства и массив указателей, get возвращает массив ячеек значений свойств. Каждая строка в ячейке соответствует объекту в массиве указателя. Каждый столбец в ячейке соответствует имени свойства.
props = {'PropertyName1','PropertyName2'};
CV = get(H,props);
get возвращает массив ячеек m на n, where m = length(H) и n = length(props).
Если вы задаете массив указателя, но никакие имена свойства, get возвращает массив типа struct в котором каждая структура в массиве соответствует объекту в H. Каждое поле в каждой структуре соответствует свойству, заданному классом H. Значение каждого поля является значением соответствующего свойства.
SV = get(H);
Если вы не присваиваете выходную переменную, то H должен быть скаляр.
Для примера смотрите Используя, добираются с Массивами Указателей.
set метод присваивает заданное значение заданному свойству для объекта с указателем H. Если H массив указателей, MATLAB присваивает значение свойству для каждого объекта в массиве H.
set(H,'PropertyName',PropertyValue)Можно передать массив ячеек имен свойства и массив ячеек значений свойств к set:
props = {'PropertyName1','PropertyName2'};
vals = {Property1Value,Property2Value};
set(H,props,vals)Если length(H) больше один, затем массив ячеек значения свойства (vals) может иметь значения для каждого свойства в каждом объекте. Например, предположите length(H) 2 (два указателя на объект). Вы хотите присвоить два значений свойств на каждом объекте:
props = {'PropertyName1','PropertyName2'};
vals = {Property11Value,Property12Value;Property21Value,Property22Value};
set(H,props,vals))
Предыдущий оператор эквивалентен следованию за двумя операторами:
set(H(1),'PropertyName1',Property11Value,'PropertyName2',Property12Value) set(H(2),'PropertyName1',Property21Value,'PropertyName2',Property22Value)
Если вы задаете скалярный указатель, но никакие имена свойства, set возвращает struct с одним полем для каждого свойства в классе H. Каждое поле содержит массив пустой ячейки.
SV = set(h);
Этот демонстрационный класс задает установить/получить интерфейс и иллюстрирует поведение унаследованных методов:
classdef LineType < matlab.mixin.SetGet properties Style = '-' Marker = 'o' end properties (SetAccess = protected) Units = 'points' end methods function obj = LineType(s,m) if nargin > 0 obj.Style = s; obj.Marker = m; end end function obj = set.Style(obj,val) if ~(strcmpi(val,'-') ||... strcmpi(val,'--') ||... strcmpi(val,'..')) error('Invalid line style ') end obj.Style = val; end function obj = set.Marker(obj,val) if ~isstrprop(val,'graphic') error('Marker must be a visible character') end obj.Marker = val; end end end
Создайте экземпляр класса и сохраните его указатель:
h = LineType('--','*');
Запросите значение любого свойства объекта с помощью наследованного get метод:
get(h,'Marker')
ans = *
Установите значение любого свойства с помощью наследованного set метод:
set(h,'Marker','Q')
MATLAB вызывает методы доступа свойства (set.Style или set.Marker в LineType класс), когда вы используете set и get методы.
set(h,'Style','-.-')
Error using LineType>LineType.set.Style
Invalid line styleДля получения дополнительной информации о методах доступа свойства см. Методы доступа к свойствам
Возвратите struct содержа свойства объектов и их текущие значения с помощью get:
h = LineType('--','*'); SV = get(h)
SV =
Style: '--'
Marker: '*'
Units: 'points'Возвратите struct содержа свойства, которые имеют public
SetAccess использование set:
S = set(h)
S =
Style: {}
Marker: {}LineType класс задает Units свойство с SetAccess = protected. Поэтому S = set(h) не создает поле для Units в S.
set не может возвратить возможные значения для свойств, которые имеют непубличный доступ к набору.
get с массивами указателейПредположим, что вы создаете массив LineType объекты:
H = [LineType('..','z'),LineType('--','q')]
H =
1x2 LineType with properties:
Style
Marker
UnitsКогда H массив указателей, get возвращается (length(H)- 1) массив ячеек значений свойств:
CV = get(H,'Style')
CV =
'..'
'--'Когда H массив указателей, и вы не задаете имя свойства, get возвращает struct массив, содержащий поля с именами, соответствующими PropertyName. Присвойте выход get к переменной, когда H не скаляр.
SV = get(H)
SV =
2x1 struct array with fields:
Style
Marker
UnitsПолучите значение Marker свойство от второго элемента массива в SV массив структур:
SV(2).Marker
ans = q
Можно передать массив указателей, массив ячеек имен свойства и массив ячеек значений свойств к set. Массив ячеек значения свойства должен поссориться значений свойств для каждого объекта в H. Каждая строка должна иметь значение для каждого свойства в массиве имени свойства:
H = [LineType('..','z'),LineType('--','q')]; set(H,{'Style','Marker'},{'..','o';'--','x'})
Результат этого вызова set :
H(1)
ans =
LineType with properties:
Style: '..'
Marker: 'o'
Units: 'pointsH(2)
ans =
LineType with properties:
Style: '--'
Marker: 'x'
Units: 'points'Настройте способ, которым списки свойств отображаются путем переопределения следующих методов в подклассе:
setdisp — Когда вы вызываете set без выходного аргумента и одного скалярного входа указателя, set вызовы setdisp определить, как отобразить список свойств.
getdisp — Когда вы вызываете get без выходного аргумента и одного скалярного входа указателя, get вызовы getdisp определить, как отобразить список свойств.