获取有关属性的信息
元。属性对象
使用meta.property
类来确定属性属性的值。a的可写属性meta.property
对象对应于关联属性的属性。可写对象的值meta.property
属性对应于类定义中指定的属性值。
你可以得到meta.property
对象的属性meta.class
对象。为了得到meta.class
类的对象:
使用
元类
函数在类的对象上执行。使用
?
操作符的类名。
例如,BasicHandle
类定义了三个属性:
classdefBasicHandle < handle从句柄超类继承定义1个公共属性和2个私有属性。属性(SetAccess = private) Date = Date PassKey = randi(9,[1,7])结束属性类别{mustBeMember(类别,{‘新’,‘改变’})}=“新”结束结束
创建meta.class
对象使用?
类名的操作符:
mc =
名称:'BasicHandle'描述:'BasicHandle继承自句柄超类' DetailedDescription: '定义1个公共属性和2个私有属性'隐藏:0密封:0摘要:0枚举:0 ConstructOnLoad: 0 handlecomcompatible: 1 InferiorClasses: {0×1 cell} ContainingPackage: [0×0元。Aliases: [0×1 string] RestrictsSubclassing: 0 PropertyList: [3×1 meta. package][24×1 meta. properties] MethodList: [24×1 meta. properties]EventList: [1×1 meta.]EnumerationMemberList: [0×1 meta. event]EnumeratedValue] SuperclassList: [1×1 meta.class]
的meta.class
对象属性名为PropertyList
包含的数组meta.property
对象,类定义的每个属性对应一个对象。类关联的属性的名称meta.property
元素中的对象1
是:
mc.PropertyList (1) . name
日期
的meta.class
对象包含meta.property
对象用于所有属性,包括隐藏属性。的属性
函数只返回公共属性。
对于句柄类,使用处理
findprop
方法来获取meta.property
对象获取特定属性。
例如,查找meta.property
对象的类别
的属性BasicHandle
类。
h = BasicHandle;Mp = findprop(h,“类别”)
mp = property with properties:名称:'Category'描述:" DetailedDescription: " GetAccess: 'public' SetAccess: 'public'依赖:0常量:0摘要:0 Transient: 0 Hidden: 0 GetObservable: 0 SetObservable: 0 AbortSet: 0 NonCopyable: 0 GetMethod: [] SetMethod: [] HasDefault: 1 DefaultValue: 'new' DefiningClass: [1×1 meta.class]
的meta.property
Display显示默认值BasicHandle
对象类别
属性:
有公共
GetAccess
而且SetAccess
默认值为
新
有关属性属性的列表,请参见属性表.
如何索引元类对象
类中直接访问其他元类对象meta.class
对象属性。例如,这样的语句:
mc = ?containers.Map;
返回一个meta.class
对象:
类(mc)
Ans = meta.class
引用PropertyList
meta.class
属性返回带有1的数组meta.property
对象的每个属性容器。地图
类:
类(mc.PropertyList)
Ans = meta.property
每个数组元素都是单个的meta.property
对象:
mc.Properties (1)
Ans = [1x1 meta.property]
的名字
的属性meta.property
对象包含字符
向量,它是属性的名称:
类(mc.PropertyList (1) . name)
Ans = char
应用标准MATLAB®索引以访问元类对象中的信息。
例如,meta.class
PropertyList
属性的数组meta.property
对象。下面的表达式访问第一个meta.property
对象,并返回首字母和尾字母(C
而且t
)的字符
中的向量。meta.property
名字
财产。
mc.PropertyList (1) . name([1 end])
ans = Ct
如何找到具有特定属性的属性
这个示例实现了一个函数,该函数查找具有特定属性值的属性。例如,你可以:
查找定义常量属性的对象(
常数
属性设置为真正的
).确定哪些属性是只读的(
GetAccess = public
,SetAccess = private
).
的findAttrValue
函数返回设置指定属性的属性名单元格数组。该函数使用以下技术从元数据中访问信息:
如果输入参数为,
obj
,是一个字符
向量,使用meta.class.fromName
静态方法获取meta.class
对象。如果输入参数为,
obj
,是一个对象,使用元类
函数来获取meta.class
对象。每个属性都有一个相关的属性
meta.property
对象。方法获取这些对象meta.class
PropertyList
财产。使用
处理
类findprop
方法确定请求的属性属性是否是有效的属性名称。属性的所有属性属性meta.property
对象。声明,findobj (mp, PropertyName)
确定是否meta.property
对象,国会议员
,有一个属性称为PropertyName
.参考
meta.property
使用动态字段名的对象属性。例如,如果attrName = 'Constant'
,然后MATLAB对表达式进行转换议员(attrName)。
来mp。Constant
可选的第三个参数允许您指定非逻辑值的属性值
真正的
或假
(如GetAccess
而且SetAccess
).
函数cl_out = findAttrValue(obj,attrName,varargin)如果ischar(obj) mc = meta.class.fromName(obj);elseifIsobject (obj) MC =元类(obj);结束Ii = 0;num_props = length(mc.PropertyList);Cl_array = cell(1, number_props);为c = 1: num_props mp = mc.PropertyList(c);如果isempty (findprop(mp,attrName))错误(“不是有效的属性名”)结束attrValue = mp.(attrName);如果attrValue如果islogical(attrValue) || strcmp(varargin{1},attrValue) ii = ii + 1;cl_array(ii) = {mp.Name};结束结束结束Cl_out = cl_array(1:ii);结束
查找属性属性
定义一个容器。地图
对象:
Mapobj =容器。地图({“玫瑰”,“自行车”}, {“花”,“机”});
使用私人
SetAccess
:
findAttrValue (mapobj“SetAccess”,“私人”)
ans = '计数' 'KeyType' 'ValueType' '序列化'
使用公共
GetAccess
:
findAttrValue (mapobj“GetAccess”,“公共”)
ans = 'Count' 'KeyType' 'ValueType' '