Используйте метаданные класса, чтобы получить информацию о классах и объектах программно. Например, можно определить значения атрибута для членов класса или получить список событий, заданных классом. Для основной информации о метаданных см. Метаданные классов.
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