使用meta.property
类以确定属性属性的值。a的可写性质meta.property
对象对应于关联属性的属性。可写对象的值meta.property
属性对应于类定义中指定的属性值。
得到了meta.property
对象的属性meta.class
对象。得到meta.class
对象的类:
使用元类
函数作用于类的对象。
使用?
使用类名的操作符。
例如,BasicHandle
类定义了三个属性:
classdef BasicHandle < handle property (SetAccess = private) Date = Date PassKey = randi(9,[1,7]) end properties class {mustBeMember(Category,{'new','change'})} = 'new' end end . class . class . class . class . class . class . class . class . class . class . class . class . class . class . class . class
创建meta.class
对象使用?
带有类名的操作符:
mc = ? BasicHandle
mc = class with properties: Name: 'BasicHandle' Description: " DetailedDescription: " Hidden: 0 Sealed: 0 Abstract: 0 Enumeration: 0 ConstructOnLoad: 0 handlecomcompatible: 1 inferorclasses: {0×1 cell} ContainingPackage: [0×0 meta. html][3×1 meta. package]方法列表:[22×1 meta. properties][1×1 meta. method]EnumerationMemberList: [0×1 meta. event]SuperclassList: [1×1 meta.class]
的meta.class
对象属性命名PropertyList
包含meta.property
对象,每个对象对应类定义的属性。属性关联的属性的名称meta.property
对象元素1
是:
mc.PropertyList (1) . name
ans =日期
的meta.class
对象包含一个meta.property
对象的所有属性,包括隐藏属性。的属性
函数仅返回公共属性。
对于句柄类,使用处理
findprop
方法获取meta.property
对象的特定属性。
例如,找到meta.property
对象的类别
财产的BasicHandle
类。
议员= findprop (BasicHandle,“类别”)
mp = property with properties: Name: 'Category' Description: " DetailedDescription: " GetAccess: 'public' SetAccess: 'public' Dependent: 0 Constant: 0 Abstract: 0 Transient: 0 Hidden: 0 getobserable: 0 setobserable: 0 AbortSet: 0 NonCopyable: 0 GetMethod: [] SetMethod: [] HasDefault: 1 DefaultValue: 'new' DefiningClass: [1×1 meta.class]
前面的meta.property
显示显示默认值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
对象包含一个字符
Vector是属性的名称:
类(mc.PropertyList (1) . name)
ans =字符
MATLAB应用标准®为访问元类对象中的信息建立索引。
例如,meta.class
PropertyList
属性包含的数组meta.property
对象。下面的表达式访问第一个meta.property
对象,并返回第一个和最后一个(C
和t
)的信件字符
包含在meta.property
的名字
财产。
mc.PropertyList (1) . name([1 end])
ans = Ct
这个例子实现了一个查找具有特定属性值的属性的函数。例如,你可以:
查找定义常量属性的对象(常数
属性设置为真正的
).
确定哪些属性是只读的(GetAccess =公共
,SetAccess =私人
).
的findAttrValue
函数返回设置指定属性的属性名称的单元格数组。
的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 =“常数”
,用MATLAB对表达式进行转换议员(attrName)。
来mp。Constant
可选的第三个参数允许指定不符合逻辑的属性的值真正的
或假
(如GetAccess
和SetAccess
).
函数cl_out = findAttrValue (obj, attrName变长度输入宗量)如果ischar(obj) mc = meta.class.fromName(obj);elseifIsobject (obj) MC =元类(obj);结束2 = 0;numb_props =长度(mc.PropertyList);cl_array =细胞(1、numb_props);为c = 1:numb_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 = 'Count' 'KeyType' 'ValueType' 'serialization'
发现属性公共
GetAccess
:
findAttrValue (mapobj“GetAccess”,“公共”)
ans = 'Count' 'KeyType' 'ValueType'