主要内容

获取有关属性的信息

元。属性对象

使用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.propertyDisplay显示默认值BasicHandle对象类别属性:

  • 有公共GetAccess而且SetAccess

  • 默认值为

有关属性属性的列表,请参见属性表

如何索引元类对象

类中直接访问其他元类对象meta.class对象属性。例如,这样的语句:

mc = ?containers.Map;

返回一个meta.class对象:

类(mc)
Ans = meta.class

引用PropertyListmeta.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.classPropertyList属性的数组meta.property对象。下面的表达式访问第一个meta.property对象,并返回首字母和尾字母(C而且t)的字符中的向量。meta.property名字财产。

mc.PropertyList (1) . name([1 end])
ans = Ct

如何找到具有特定属性的属性

这个示例实现了一个函数,该函数查找具有特定属性值的属性。例如,你可以:

  • 查找定义常量属性的对象(常数属性设置为真正的).

  • 确定哪些属性是只读的(GetAccess = publicSetAccess = private).

findAttrValue函数返回设置指定属性的属性名单元格数组。该函数使用以下技术从元数据中访问信息:

  • 如果输入参数为,obj,是一个字符向量,使用meta.class.fromName静态方法获取meta.class对象。

  • 如果输入参数为,obj,是一个对象,使用元类函数来获取meta.class对象。

  • 每个属性都有一个相关的属性meta.property对象。方法获取这些对象meta.classPropertyList财产。

  • 使用处理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' '

相关的话题