主要内容

实现属性的Set/Get接口

标准的Set/Get接口

一些MATLAB®对象,如图形对象,实现基于得到功能。这些函数允许在单个函数调用中访问对象数组的多个属性。

您可以添加得到通过从这些类中派生一个类来实现类的功能:

  • matlab.mixin.SetGet-当需要支持不区分大小写的部分属性名匹配金宝app时使用。派生自matlab.mixin.SetGet不影响使用点符号引用属性所需的确切属性名。

  • matlab.mixin.SetGetExactNames-当您希望仅支持区分大小写的完整属性名匹配时使金宝app用。

请注意

得到本节中提到的方法不同于属性设置访问和属性获取访问方法。看到属性访问方法查阅有关物业使用方法的资料。

子类的语法

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

classdefMyClass < matlab.mixin.SetGet…结束

因为matlab.mixin.SetGetmatlab.mixin.SetGetExactNames源自处理类,你的子类也是处理类。

Get方法的语法

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

v = get (H,PropertyName);

如果指定具有单个属性名的句柄数组,得到以值的单元格数组形式返回每个对象的属性值:

简历=得到(H,PropertyName);

简历数组始终是列,而不管其形状如何H

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

道具= {PropertyName1PropertyName2};简历= (H,道具);

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

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

SV = (H);

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

例如,请参见使用get和句柄数组

设置方法语法

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

集(H,PropertyNamePropertyValue)

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

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

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

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

前面的陈述等价于下面的两个陈述:

集(H (1),PropertyName1Property11Value,PropertyName2,Property12Value)集合(H(2),PropertyName1Property21Value,PropertyName2Property22Value)

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

SV =组(h);

类派生自matlab.mixin.SetGet

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

classdef线型属性风格=“- - -”标志=“哦”结束属性(设置访问=受保护)单元=“点”结束方法函数obj =线型(s, m)如果nargin>0对象样式=s;对象标记=m;结束结束函数set.Style (obj, val)如果~ (strcmpi (val,“- - -”) | |...strcmpi (val,“——”) | |...strcmpi (val,“. .”))错误(“无效的行样式”结束obj。年代tyle = val;结束函数集合标记(obj、val)如果~ isstrprop (val,“图形”)错误(“标记必须是可见字符”结束目标标记=val;结束结束结束

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

h =线型(“——”'*');

使用继承的属性查询任何对象属性的值得到方法:

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

使用继承的属性设置任何属性的值方法:

集(h,“标记”“问”

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

MATLAB调用属性访问方法(集。年代tyle集。标记线型类),当你使用得到方法。

集(h,“风格”“”-”
错误使用线型/组。风格(line 20) Invalid line style

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

列出所有属性

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

h =线型(“——”'*');SV =得到(h)
SV=带字段的结构:样式:'--'标记:'*'单位:'点'

返回一个结构体包含属性的平民的SetAccess使用

S =组(h)
S=带字段的结构:样式:{}标记:{}

线型类定义了单位财产SetAccess =保护.因此,S =组(h)不创建字段为单位年代

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

使用得到使用句柄数组

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

H =[线型(“. .”“z”),线型(“——”“问”)]
H=1x2线型,具有以下特性:样式标记单位

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

简历=得到(H,“风格”
CV = 2×1 cell array {'..'}{“——”}

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

SV =得到(H)
SV = 2x1 struct数组与字段:风格标记单位

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

SV(2)。标记
ans =“问”

句柄、名称和值的数组

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

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

调用的结果是:

H (1)
ans = LineType属性:Style: '..'标记:'o'单位:'分
H (2)
ans = LineType带有属性:Style: '——' Marker: 'x' Units: 'points'

自定义属性列表

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

  • setdisp-当你打电话时没有输出参数,只有一个标量句柄输入,调用setdisp确定如何显示属性列表。

  • getdisp-当你打电话时得到没有输出参数,只有一个标量句柄输入,得到调用getdisp确定如何显示属性列表。

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

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

继承的得到方法可以在不存在由不精确名称字符串导致的二义性时解析不精确的属性名称。当部分属性名由于匹配多个属性而不明确时,则PartialMatchPriority属性值可以确定MATLAB匹配哪个属性。

默认优先级等于PartialMatchPriority = 1。若要降低属性的相对优先级,请设置PartialMatchPriority到2或更大的正整数。财产的优先级随着价值的降低而降低PartialMatchPriority增加。

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

classdefMyClass < matlab.mixin.SetGet属性冗长结束属性(PartialMatchPriority = 2)版本号结束结束

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

一个= MyClass;集(,“版本”,10)disp(a)
MyClass with properties: verbose: 10 Version: []

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

v =得到(,“版本”
v = 10

大小写与名称匹配

具有非匹配大小写的全名匹配优先于具有更高优先级属性的部分匹配。例如,这个类定义基线属性的优先级为1(默认值)和a基地属性的优先级为2(低于1)。

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

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

一个= MyClass;集(,“基地”, 2) disp (a)
[] Base: -2

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

你可以使用PartialMatchPriority属性,以避免在添加新属性时引入代码不兼容。例如,这个类启用得到方法来引用距离属性的字符串因为DiscreteSamples财产优先级较低。

classdef行星< matlab.mixin.SetGet% 1.0版本属性距离结束属性(PartialMatchPriority = 2结束结束

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

classdef行星< matlab.mixin.SetGet% 2.0版本属性直径;NumMoons = 0明显星等;DistanceFromSun;结束属性(PartialMatchPriority = 2)离散采样;结束属性(PartialMatchPriority = 3) Discontinuities = false;结束结束

的1.0版地球类的调用方法并不含糊。

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

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

请注意

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

另请参阅

|||

相关的话题