主要内容

实现属性的设置/获取接口

标准的设置/获取接口

一些MATLAB®对象(例如图形对象)实现基于的接口而且得到功能。这些函数允许在一个函数调用中访问对象数组上的多个属性。

你可以添加而且得到通过从以下类中派生一个来实现类的功能:

  • matlab.mixin.SetGet-当你想要支持不区分大小写,部分属性名匹万博1manbetx配时使用。源于matlab.mixin.SetGet不影响使用点符号引用属性所需的确切属性名。

  • matlab.mixin.SetGetExactNames-当你想只支持区分大小写的完整属性名匹配时使用万博1manbetx。

请注意

而且得到本节中提到的方法不同于属性set访问和属性get访问方法。看到属性访问方法有关属性访问方法的信息。

子类的语法

使用抽象类matlab.mixin.SetGetmatlab.mixin.SetGetExactNames作为一个超类:

classdefMyClass < matlab.mix . setget…结束

因为matlab.mixin.SetGet而且matlab.mixin.SetGetExactNames处理类,你的子类也是处理类。

Get方法语法

得到方法使用对象句柄和属性名返回对象属性的值。例如,假设H是对象的句柄:

v = get(H,PropertyName);

如果使用单个属性名指定一个句柄数组,得到返回每个对象的属性值作为单元格数组的值:

CV = get(H,PropertyName);

简历数组总是一个列,不管形状如何H

的单元格数组字符向量属性名和句柄数组,得到返回属性值的单元格数组。单元格中的每一行都对应句柄数组中的一个对象。单元格中的每一列都对应一个属性名。

道具= {PropertyName1PropertyName2};CV = get(H,道具);

得到返回一个m × n单元格数组,其中m =长度(H)而且N =长度(道具)

如果指定了句柄数组,但没有指定属性名,得到返回一个类型的数组结构体其中数组中的每个结构都对应于中的一个对象H.的类定义的属性H.每个字段的值都是相应属性的值。

SV = get(H);

如果不指定输出变量,则H必须为标量。

有关示例,请参见在句柄数组中使用get

设置方法语法

方法将指定的值赋给具有句柄的对象的指定属性H.如果H是一个句柄数组,MATLAB为数组中的每个对象的属性赋值H

集(H,PropertyNamePropertyValue)

可以将属性名称单元格数组和属性值单元格数组传递给

道具= {PropertyName1PropertyName2};vals = {Property1Value,Property2Value};集(H,道具,瓦尔斯)

如果长度(H)大于1时,则属性值单元格数组(瓦尔斯)可以为每个对象中的每个属性赋值。例如,假设长度(H)是2(两个对象句柄)。你想给每个对象赋两个属性值:

道具= {PropertyName1PropertyName2};vals = {Property11Value,Property12Value;Property21Value,Property22Value};集(H,道具,vals))

上面的语句等价于下面两个语句:

集(H (1),PropertyName1Property11Value,PropertyName2Property12Value)组(H (2),PropertyName1Property21Value,PropertyName2Property22Value)

如果指定了标量句柄,但没有指定属性名,返回一个结构体类中的每个属性都有一个字段H.每个字段包含一个空单元格数组。

SV = set(h);

从matlab.mix . setget派生的类

这个示例类定义了一个set/get接口,并说明了继承方法的行为:

classdefLineType < matlab.mix . setget属性风格='-'标志=“o”结束属性(SetAccess = protected)单位=“点”结束方法函数obj = LineType(s,m)如果Nargin > 0 obj。Style = s;obj。标记= m;结束结束函数set.Style (obj, val)如果~ (strcmpi (val,'-') | |...strcmpi (val,“——”) | |...strcmpi (val,“. .”)错误(“无效的行样式”结束obj。年代tyle = val;结束函数set.Marker (obj, val)如果~ isstrprop (val,“图形”)错误(标记必须是一个可见的字符结束obj。标记= val;结束结束结束

创建类的实例并保存它的句柄:

h = LineType(“——”‘*’);

属性查询任意对象属性的值得到方法:

get (h,“标记”
Ans = '*'

属性设置任意属性的值方法:

集(h,“标记”“问”

属性访问方法用set和get调用

MATLAB调用属性访问方法(集。年代tyle集。标记线型类时)而且得到方法。

集(h,“风格”“”-”
使用LineType/set时出错。风格(line 20) Invalid line style

有关属性访问方法的更多信息,请参见属性访问方法

列出所有属性

返回一个结构体包含对象属性及其当前值得到

h = LineType(“——”‘*’);SV = get(h)
SV = struct with fields: Style: '——' Marker: '*'单位:'points'

返回一个结构体包含具有的属性公共SetAccess使用

S = set(h)
S = struct with fields:样式:{}标记:{}

线型类定义单位财产与SetAccess = protected.因此,S = set(h)没有为?创建字段单位年代

无法为具有非公共集访问权限的属性返回可能的值。

使用得到使用句柄数组

假设创建一个数组线型对象:

H = [LineType(“. .”“z”)、线型(“——”“问”)]
H = 1x2 LineType属性:样式标记单元

H是句柄的数组,得到返回一个(长度(H)-by-1)属性值单元格数组:

CV = get(H,“风格”
CV = 2×1单元格数组{'..'}{“——”}

H是句柄数组,且未指定属性名,得到返回一个结构体数组,包含名称与属性名称相对应的字段。的输出赋值得到到一个变量,当H不是标量。

SV = get(H)
SV = 2x1带字段的结构数组:样式标记单元

的值标记属性中的第二个数组元素SV结构数组:

SV(2)。标记
Ans = 'q'

句柄、名称和值的数组

可以将句柄数组、属性名单元格数组和属性值单元格数组传递给.属性值单元格数组中每个对象必须有一行属性值H.每行必须为属性名数组中的每个属性赋值:

H = [LineType(“. .”“z”)、线型(“——”“问”));集(H, {“风格”“标记”}, {“. .”“o”“——”“x”})

调用的结果是:

H (1)
ans =带有属性的LineType: Style: '..'标记:“o”单位:“点”
H (2)
ans =带有属性的LineType:样式:'——'标记:'x'单位:'points'

自定义属性列表

通过在子类中重新定义以下方法自定义属性列表的显示方式:

  • setdisp-当你打电话的时候在没有输出参数和单个标量句柄输入的情况下,调用setdisp以确定如何显示属性列表。

  • getdisp-当你打电话的时候得到在没有输出参数和单个标量句柄输入的情况下,得到调用getdisp以确定如何显示属性列表。

设置匹配部分属性名的优先级

派生自matlab.mixin.SetGet可以使用PartialMatchPriority属性为部分名称匹配指定相对优先级。MATLAB在解析匹配多个属性名的不完整和不区分大小写的文本字符串时应用此属性。

继承的而且得到如果不精确的名称字符串不会导致歧义,则方法可以解析不精确的属性名。如果部分属性名由于名称匹配多个属性而具有歧义,则PartialMatchPriority属性值可以确定MATLAB匹配哪个属性。

缺省优先级相当于PartialMatchPriority = 1.若要降低属性的相对优先级,请设置PartialMatchPriority到2或更大的正整数值。的值使属性的优先级降低PartialMatchPriority增加。

例如,在这个类中冗长属性的名称匹配优先级高于版本财产。

classdefMyClass < matlab.mix . setget属性冗长结束属性(PartialMatchPriority = 2)版本结束结束

调用方法使用可能有歧义的不准确名称版本设置冗长属性,因为它具有较高的相对优先级。没有设置PartialMatchPriority属性时,不明确的名称将导致错误。

a = MyClass;集(,“版本”10) disp(一个)
MyClass与属性:verbose: 10版本:[]

相同的名称选择适用于得到方法。

V = get(a,“版本”
V = 10

案例和名称匹配

具有不匹配情况的全名匹配优先于具有更高优先级属性的部分匹配。例如,该类定义基线属性,优先级为1(默认值)基地优先级为2(低于1)的属性。

classdefMyClass < matlab.mix . setget属性基线结束属性(PartialMatchPriority = 2) Base结束结束

调用方法。基地设置基地财产。基线具有更高的优先级,但大小写不正确的全名匹配优先。

a = MyClass;集(,“基地”, 2) disp (a)
MyClass与属性:基线:[]基数:-2

减少添加新属性时的不兼容性

您可以使用PartialMatchPriority属性,以避免在添加新属性时引入代码不兼容。例如,该类启用而且得到方法距离属性。因为DiscreteSamples属性的优先级较低。

classdefPlanet < matlab.mix . setget版本1.0属性距离结束属性(PartialMatchPriority = 2)离散样本结束结束

类的2.0版引入了一个名为不连续.为防止在现有代码中产生不明确的部分属性名,请使用PartialMatchPriority设置的优先级不连续低于现有物业的价格。

classdefPlanet < matlab.mix . setget%版本2.0属性直径;NumMoons = 0 tmagnitude;DistanceFromSun;结束属性(PartialMatchPriority = 2)离散样本;结束属性(PartialMatchPriority = 3)不连续性= false;结束结束

的1.0版本地球类,此调用到方法并不含糊。

p =行星;集(p,“盘”,真正的)

然而,随着不连续属性,字符串阀瓣变得模糊。通过给出不连续属性的优先级较低,则字符串阀瓣继续匹配DiscreteSamples财产。

请注意

在编写可重用代码时,使用完整的、区分大小写的属性名可以避免歧义,防止与后续软件版本不兼容,并生成更可读的代码。

另请参阅

|||

相关的话题