类定义可以为属性指定显式的默认值(参见属性默认值)。确定类是否为属性定义了显式的默认值,以及默认值来自该属性meta.property
对象。
的meta.class
类的meta.property
对象,用于类定义的每个属性,包括具有私有访问和受保护访问的属性。
例如,得到meta.class
对象的PropertyWithDefault
类所示:
classdefPropertyWithDefault属性Date = Date RandNumber = randi(9)结束结束
获取meta.property
对象的meta.class
对象:
mc = ? PropertyWithDefault;% meta.class对象议员= mc.PropertyList;%元。属性数组
的第二个元素国会议员
数组是meta.property
对象的RandNumber
财产。清单的meta.property
对象显示其属性中包含的信息:
议员(2)
属性:Name: 'RandNumber' 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: 1DefaultValue: 5DefiningClass(1×1 meta.class):
列出的两个meta.property
属性提供关于默认值的信息:
HasDefault
- - - - - -真正的
(显示为1),如果类指定属性的默认值,假
如果没有。
DefaultValue
-当类为属性定义默认值时,包含默认值。如果默认值是表达式,则为DefaultValue
是计算表达式的结果。
有关表达式定义的属性默认值的计算的更多信息,请参见类定义中表达式的求值.
这些属性提供了一种编程方式,无需打开类定义文件即可获得属性默认值。使用这些meta.property
对象属性获取内置类和MATLAB中定义的类的属性默认值®代码。
查询默认值的过程包括:
得到了meta.property
要查询其默认值的属性的。
的逻辑值测试meta.property
HasDefault
属性确定该属性是否定义默认值。当您查询时,MATLAB返回一个错误DefaultValue
属性,如果类没有为该属性定义默认值。
中获取默认值meta.property
DefaultValue
财产,如果HasDefault
值是真正的
.
使用?
操作符,元类
函数,或meta.class.fromName
静态方法(与字符
向量变量),得到ameta.class
对象。
的meta.class
对象PropertyList
包含meta.property
对象。确定哪个属性对应于哪个属性meta.property
对象使用meta.property
的名字
财产。
例如,这个类用默认值定义属性:
classdefMyDefs属性材料=“丙烯酸”InitialValue = 1.0结束结束
属性的默认值,请执行以下步骤材料
财产。包括应用程序所需的任何错误检查。
得到了meta.class
类的对象:
mc = ? MyDefs;
获取meta.property
对象的meta.class
PropertyList
属性:
议员= mc.PropertyList;
长度国会议员
数组等于属性的数量。你可以使用meta.property
的名字
寻找财产利益的财产:
为k = 1:长度(mp)如果(比较字符串(mp (k)。的名字,“材料”)...
查询的默认值材料
属性,测试HasDefault
meta.property
来确定MyClass
定义此属性的默认属性:
如果mp (k)。HasDefault dv = mp(k).DefaultValue;结束
的DefaultValue
属性是只读的。更改类定义中的默认值将更改DefaultValue
财产。无论属性的访问设置如何,都可以查询属性的默认值。
抽象属性和动态属性不能定义默认值。因此,如果您试图查询这些属性的默认值,MATLAB将返回一个错误。始终测试的逻辑值meta.property
HasDefault
属性,然后查询DefaultValue
属性以避免生成错误。
类定义可以将属性默认值定义为MATLAB表达式(参见类定义中表达式的求值的更多信息)。MATLAB会在第一次需要默认值时计算这些表达式,比如第一次创建类的实例时。
查询meta.property
DefaultValue
属性导致MATLAB计算尚未计算的默认值表达式。因此,如果在MATLAB计算表达式时出现错误或警告,查询属性默认值可以返回一个错误或警告。看到属性的表达式错误了一个例子。
MyClass
没有明确定义?的默认值喷火
属性:
classdefMyFoo属性喷火结束结束
的meta.property
实例属性喷火
值为假
为HasDefault
.因为类没有显式定义的默认值喷火
,试图访问DefaultValue
属性导致错误:
mc = ? MyFoo;议员= mc.PropertyList (1);mp。HasDefault
ans = 0
dv = mp.DefaultValue;
没有为属性Foo定义默认值
MyClass
定义了喷火
财产摘要
:
classdefMyAbst属性Foo(抽象)结束结束
的meta.property
实例属性喷火
值为假
为其HasDefault
属性的默认值,因为无法定义摘要
财产。试图访问DefaultValue
会导致一个错误:
mc = ? MyAbst;议员= mc.PropertyList (1);mp。HasDefault
ans = 0
dv = mp.DefaultValue;
属性Foo是抽象的,因此不能有默认值。
MyPropEr
定义了喷火
属性默认值作为在计算时出错的表达式。
classdefMyPropEr属性Foo =罪(馅饼/ 2)结束结束
的meta.property
对象的属性喷火
值为真正的
为其HasDefault
财产,因为喷火
有一个默认值:
罪(馅饼/ 2)
然而,该表达式返回一个错误(派
是创建饼图的函数而不是值吗π
)。
mc = ? MyPropEr;议员= mc.PropertyList (1);mp。HasDefault
ans = 1
dv = mp.DefaultValue;
使用pie出错(第29行)输入参数不足。
查询默认值会导致表达式的计算并返回错误。
MyEmptyProp
指定默认值为[]
(空双)到喷火
属性:
classdefMyEmptyProp属性Foo = []结束结束
的meta.property
对象的属性喷火
它的值为真HasDefault
财产。访问DefaultValue
返回的值[]
:
mc = ? MyEmptyProp;议员= mc.PropertyList (1);mp。HasDefault
ans = 1
dv = mp.DefaultValue;
dv = []