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