主要内容

使用元数据的类自省

使用类的元数据

使用类元数据以编程方式获取关于类和对象的信息。例如,您可以确定类成员的属性值,或者获得由类定义的事件列表。元数据的基本信息请参见类元数据

检查EmployeeData类

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.classPropertyList财产。

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类。使用SetAccessGetAccess的性质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

元类EnumeratedValues财产

meta.classEnumeratedValues属性包含的数组元。EnumeratedValue对象,每个枚举成员一个。使用元。EnumeratedValue的名字属性获取由枚举类定义的枚举成员名。例如,给定工作日枚举类:

classdef工作日枚举星期一,星期二,星期三,星期四,星期五结束结束

的查询枚举名称meta.class对象:

mc = ?工作日;mc.EnumerationMemberList (2) . name
ans =周二

相关的话题