Некоторые объекты MATLAB®, такие как графические объекты, реализуют интерфейс на основе функций get
и set
. Эти функции включают доступ к нескольким свойствам на массивах объектов в единственном вызове функции.
Можно добавить 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
), когда вы используете методы get
и set
.
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
не может возвратить возможные значения для свойств, которые имеют непубличный доступ к набору.
Используя добираются с Массивами Указателей
Предположим, что вы создаете массив объектов LineType
:
H = [LineType('..','z'),LineType('--','q')]
H = 1x2 LineType with properties: Style Marker Units
Когда H
является массивом указателей, get
возвращается (length(H)
-by-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: 'points
H(2)
ans = LineType with properties: Style: '--' Marker: 'x' Units: 'points'
Настройте способ, которым списки свойств отображаются путем переопределения следующих методов в подклассе:
setdisp
Когда вы вызываете set
без выходного аргумента и единственного скалярного входного параметра указателя, set
вызывает setdisp
, чтобы определить, как отобразить список свойств.
getdisp
Когда вы вызываете get
без выходного аргумента и единственного скалярного входного параметра указателя, get
вызывает getdisp
, чтобы определить, как отобразить список свойств.