类内省与元数据

使用元数据类

使用类的元数据,以获取有关类的信息和编程对象。例如,你可以决定属性值类成员或得到由类定义的事件列表。有关的元数据的基本信息,请参阅类的元数据

检查EmployeeData工作类

EmployeeData工作类是处理其中一个带有两个属性类,具有私有访问和定义了一组访问方法。

classdefEmployeeData工作<手柄性能员工姓名结束性能(ACCESS =私人)EmployeeNumber结束方法功能OBJ = EmployeeData工作(姓名,SS)如果nargin> 0 obj.EmployeeName =名;obj.EmployeeNumber = SS;结束结束功能set.EmployeeName(OBJ,名)如果ischar(名称)obj.EmployeeName =名;其他错误(“员工姓名必须是一个char向量”结束结束结束结束

检查类定义

使用EmployeeData工作类,创建meta.class对象使用运营商:

MC = EmployeeData工作?;

从哪些类确定EmployeeData工作派生的。返回的值是一个meta.class对象为处理超类:

A = mc.SuperclassList;一个名字
ANS =手柄

EmployeeData工作类只有一个超类。对于有一个以上的直接超类,一个包含meta.class对象的每个超类。

使用索引引用来引用任何特定的超类:

一(1),请将.Name

或者,直接从MC

mc.SuperclassList(1)请将.Name
ANS =手柄

SuperclassList属性包含唯一的直接超类。

检查属性

查找该定义的属性的名称EmployeeData工作类。第一获取的阵列meta.properties从对象meta.class对propertyList属性。

MC = EmployeeData工作?;mpArray = mc.PropertyList;

长度mpArray表明有两个meta.property对象,一个用于由定义的每个属性EmployeeData工作类:

长度(mpArray)ANS = 2

现在得到meta.property从阵列对象:

PROP1 = mpArray(1);prop1.Name
ANS = EmployeeName

名称财产meta.property对象标识类属性表示由meta.property目的。

查询其他meta.property对象属性来确定的属性员工姓名属性。

发现在组件与特定属性

您可以使用索引技术,以具有特定属性值列表类组件。例如,该代码列出的方法EmployeeData工作类有私人的访问:

MC = EmployeeData工作?;mc.PropertyList(ismember({mc.PropertyList(:)。SetAccess},'私人的'))。名称
ANS = EmployeeNumber

访问不是的属性meta.property类。用SetAccessGetAccess的,这是的性质meta.property类。

找到了在使用像这样的一个说法逻辑值的属性的组件:

MC =手柄?;mc.MethodList(ismember([mc.MethodList(:)。隐藏],真))。名称
ANS =空

检查类实例

创建EmployeeData工作对象,并确定访问属性设置:

EdObj = EmployeeData工作('我的名字',1234567);mcEdObj =元类(EdObj);mpArray = mcEdObj.PropertyList;EdObj。(mpArray(1)请将.Name)%动态字段名使用对象

的价值员工姓名属性是文本我的名字,这被分配在构造函数中。

ANS =我的名字

的价值员工编号属性是不可访问,因为酒店有私人访问

EdObj。(mpArray(2)请将.Name)
你不能得到EmployeeData工作的“EmployeeNumber”属性。
mpArray(2).GetAccess
ANS =私有

获得功能处理员工姓名属性集访问功能:

mpArray(1).SetMethod
ANS = @D:\ MYDIR \ @EmployeeData \ EmployeeData.m> EmployeeData.set.EmployeeName

元类EnumeratedValues物业

meta.classEnumeratedValues属性包含的阵列meta.EnumeratedValue对象,每个枚举成员。使用meta.EnumeratedValue名称属性以获得由枚举类中定义的枚举成员名称。例如,给定的平日枚举类:

classdef平日列举周一周二周三周四周五结束结束

从查询枚举名meta.class目的:

?MC =工作日;mc.EnumerationMemberList(2)请将.Name
ANS =周二

相关话题