使用类元数据以编程方式获取关于类和对象的信息。例如,您可以确定类成员的属性值,或者获得由类定义的事件列表。元数据的基本信息请参见类元数据.
的EmployeeData
类是一个处理
类具有两个属性,其中一个具有private访问
并定义集合访问方法。
classdefEmployeeData <处理属性EmployeeName结束属性(Access = private) EmployeeNumber结束方法函数obj = EmployeeData(名称、ss)如果Nargin > 0 obj。EmployeeName= name; obj.EmployeeNumber = ss;结束结束函数set.EmployeeName (obj,名称)如果ischar(名字)obj。EmployeeName= name;其他的错误('员工名必须是一个字符向量')结束结束结束结束
使用EmployeeData
类,创建一个meta.class
对象使用?
接线员:
mc = ? EmployeeData;
从哪些类中确定EmployeeData
派生。返回值为meta.class
对象的处理
超类:
一个= mc.SuperclassList;a.Name
ans =处理
的EmployeeData
类只有一个超类。对于具有多个直接超类的类,一个
包含一个meta.class
对象的每个超类。
使用索引引用来引用任何特定的超类:
(1)。的名字
或者,直接从mc
:
mc.SuperclassList (1) . name
ans =处理
的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。的名字
ans = EmployeeName
的的名字
财产的meta.property
对象标识由其表示的类属性meta.property
对象。
查询其他meta.property
对象的属性,以确定EmployeeName
属性。
可以使用索引技术列出具有特定属性值的类组件。例如,这段代码列出了EmployeeData
类,私人
访问:
mc = ? EmployeeData;mc.PropertyList (ismember ({mc.PropertyList (:) .SetAccess},“私人”)).的名字
ans = EmployeeNumber
访问
难道不是财产吗meta.property
类。使用SetAccess
和GetAccess
的性质meta.property
类。
使用如下语句查找具有逻辑值属性的组件:
mc = ?处理;mc.MethodList (ismember ([mc.MethodList (:) .Hidden], true)) . name
ans =空
创建一个EmployeeData
对象并确定属性访问设置:
EdObj = EmployeeData (“我的名字”, 1234567);mcEdObj =元类(EdObj);mpArray = mcEdObj.PropertyList;EdObj。(mpArray (1) . name)%动态字段名适用于对象
价值EmployeeName
属性为文本我的名字
,它是在构造函数中赋值的。
我的名字
价值EmployeeNumber
属性不可访问,因为该属性为私有访问
.
EdObj。(mpArray (2) . name)
您无法获得EmployeeData的'EmployeeNumber'属性。
mpArray(2)。GetAccess
ans =私人
获得一个函数处理
到EmployeeName
属性集访问功能:
mpArray(1)。SetMethod
ans = @D: \ MyDir \ @EmployeeData \ EmployeeData.m > EmployeeData.set.EmployeeName
的meta.class
EnumeratedValues
属性包含的数组元。EnumeratedValue
对象,每个枚举成员一个。使用元。EnumeratedValue
的名字
属性获取由枚举类定义的枚举成员名。例如,给定工作日
枚举类:
classdef工作日枚举星期一,星期二,星期三,星期四,星期五结束结束
的查询枚举名称meta.class
对象:
mc = ?工作日;mc.EnumerationMemberList (2) . name
ans =周二