Используйте метаданные классов, чтобы получить информацию о классах и объектах программно. Для примера можно определить значения атрибутов для членов класса или получить список событий, определенных классом. Основные сведения о метаданных см. в разделе «Метаданные классов».
The EmployeeData класс является handle класс с двумя свойствами, одно из которых имеет частные Access и определяет метод доступа к набору.
classdef EmployeeData < handle properties EmployeeName end properties (Access = private) EmployeeNumber end methods function obj = EmployeeData(name,ss) if nargin > 0 obj.EmployeeName = name; obj.EmployeeNumber = ss; end end function set.EmployeeName(obj,name) if ischar(name) obj.EmployeeName = name; else error('Employee name must be a char vector') end end end end
Использование EmployeeData класс, создать meta.class объект с использованием ? оператор:
mc = ?EmployeeData;
Определите, из каких классов EmployeeData выводит. Возвращаемое значение является meta.class объект для handle суперкласс:
a = mc.SuperclassList; a.Name
ans = handle
The EmployeeData класс имеет только один суперкласс. Для классов, имеющих более одного прямого суперкласса, a содержит meta.class объект для каждого суперкласса.
Используйте индексированную ссылку для ссылки на любой конкретный суперкласс:
a(1).Name
или, непосредственно от mc:
mc.SuperclassList(1).Name
ans = handle
The SuperclassList свойство содержит только прямые суперклассы.
Найдите имена свойств, заданных в EmployeeData класс. Сначала получите массив meta.properties объекты из meta.class PropertyList свойство.
mc = ?EmployeeData; mpArray = mc.PropertyList;
Длина mpArray указывает, что существует два meta.property объекты, по одному для каждого свойства, заданного в EmployeeData класс:
length(mpArray)
ans =
2Теперь получите meta.property объект из массива:
prop1 = mpArray(1); prop1.Name
ans = EmployeeName
The Name свойство meta.property объект определяет свойство класса, представленное этим meta.property объект.
Запросить другое meta.property свойства объекта для определения атрибутов EmployeeName свойства.
Можно использовать методы индексации для перечисления компонентов класса с определенными значениями атрибутов. Для примера в этом коде перечислены методы в EmployeeData класс, который имеет private доступ:
mc = ?EmployeeData;
mc.PropertyList(ismember({mc.PropertyList(:).SetAccess},'private')).Nameans = EmployeeNumber
Access не является свойством meta.property класс. Использование SetAccess и GetAccess, которые являются свойствами meta.property класс.
Найти компоненты с атрибутами, которые являются логическими значениями, используя оператор, подобный этому:
mc = ?handle; mc.MethodList(ismember([mc.MethodList(:).Hidden],true)).Name
ans = empty
Создайте EmployeeData объект и определить настройки доступа к свойствам:
EdObj = EmployeeData('My Name',1234567); mcEdObj = metaclass(EdObj); mpArray = mcEdObj.PropertyList; EdObj.(mpArray(1).Name) % Dynamic field names work with objects
Значение EmployeeName свойство является текстом My Name, который был назначен в конструкторе.
ans = My Name
Значение EmployeeNumber свойство недоступно, поскольку свойство имеет частные Access.
EdObj.(mpArray(2).Name)
You cannot get the 'EmployeeNumber' property of EmployeeData.mpArray(2).GetAccess
ans = private
Получите функцию handle на EmployeeName функция доступа к набору свойств:
mpArray(1).SetMethod
ans = @D:\MyDir\@EmployeeData\EmployeeData.m>EmployeeData.set.EmployeeName
The meta.class EnumeratedValues свойство содержит массив meta.EnumeratedValue объекты, по одному для каждого представителя перечисления. Используйте meta.EnumeratedValue Name свойство для получения имен представителей перечисления, заданных классом перечисления. Для примера, учитывая WeekDays класс перечисления:
classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end end
Имена перечислений запросов из meta.class объект:
mc = ?WeekDays; mc.EnumerationMemberList(2).Name
ans = Tuesday