Используйте метаданные классов для получения информации о классах и объектах программным способом. Например, можно определить значения атрибутов для членов класса или получить список событий, определенных классом. Основные сведения о метаданных см. в разделе Метаданные класса.
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
EmployeeData класс имеет только один суперкласс. Для классов, имеющих более одного прямого суперкласса, a содержит meta.class для каждого суперкласса.
Используйте индексированную ссылку для ссылки на любой конкретный суперкласс:
a(1).Name
или, непосредственно из mc:
mc.SuperclassList(1).Name
ans = handle
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
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
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