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