主要内容

实现属性的集/获取界面

标准集/获取界面

一些matlab.®对象(例如图形对象),基于的对象实现接口得到功能。这些函数可以在单个函数调用中访问对象数组上的多个属性。

你可以加得到通过从其中一个类派生的课程的功能:

  • matlab.mixin.setget.- 当您想要支持不区分大小写的部分属性名金宝app称匹配时使用。衍生自matlab.mixin.setget.不影响使用点表示法对属性所需的确切属性名称。

  • matlab.mixin.setgetexactnames.- 当您想要仅支持区分大小写的全部属性名称匹配金宝app时使用。

笔记

得到本节中提到的方法与属性集访问和属性获取访问方法不同。看物业访问方法有关属性访问方法的信息。

子类语法

使用抽象类matlab.mixin.setget.或者matlab.mixin.setgetexactnames.作为超类:

Classdef.myclass 结尾

因为matlab.mixin.setget.matlab.mixin.setgetexactnames.源自处理类,你的子类也是一个处理班级。

获取方法语法

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

v = get(h,'propertyname.');

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

cv = get(h,'propertyname.');

简历无论的形状如何,阵列都是一列H

如果指定单元格数组char矢量属性名称和一系列手柄,得到返回属性值的单元格数组。单元中的每一行对应于句柄阵列中的对象。单元中的每个列对应于属性名称。

Props = {'propertyname1.''propertyname2.'};cv = get(h,props);

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

如果指定句柄阵列,但没有属性名称,得到返回一系列类型塑造其中阵列中的每个结构对应于对象H。每个结构中的每个字段对应于由类别定义的属性H。每个字段的值是相应属性的值。

sv = get(h);

如果您未分配输出变量,那么H必须是标量。

例如,看到使用GET与手柄数组

设置方法语法

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

套(H,'propertyname.',适当的价值)

您可以通过单元格数组和属性值的单元格数组

Props = {'propertyname1.''propertyname2.'};vals = {property1value,property2value};设置(h,props,vals)

如果长度(h)大于一个,然后是属性值单元格数组(val)可以为每个对象中的每个属性具有值。例如,假设长度(h)是2(两个物体句柄)。您希望在每个对象上分配两个属性值:

Props = {'propertyname1.''propertyname2.'};vals = {property11value,property12value; property21value,property22value};设置(H,Props,Vals))

前面的声明相当于以下两个陈述:

设置(h(1),'propertyname1.',property11value,'propertyname2.',property12value)设置(h(2),'propertyname1.',property21value,'propertyname2.',property22value)

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

sv = set(h);

类派生自MATLAB.MIXIN.SETGET

此示例类定义了集/获取界面,并说明了继承方法的行为:

Classdef.linetype 特性风格=' - 'Marker ='o'结尾特性(setaccess =受保护)单位=“点”结尾方法功能obj = linetype(s,m)如果nargin> 0 obj.style = s;obj.marker = m;结尾结尾功能set.style(obj,val)如果〜(Strcmpi(val,' - ')||......Strcmpi(Val,' - ')||......Strcmpi(Val,'..')) 错误('无效的线条风格'结尾obj.style = val;结尾功能set.marker(obj,val)如果〜isstrprop(val,'形象的') 错误('标记必须是可见的性格'结尾obj.marker = val;结尾结尾结尾

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

h =线型(' - ''*');

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

得到(h,'标记'
ans ='*'

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

套(H,'标记''Q'

属性访问方法调用设置并获得

MATLAB调用属性访问方法(set.style.或者set.marker.在里面线型类)当你使用时得到方法。

套(H,'风格''-.-'
使用lineetype / set.style(第20行)错误错误

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

列出所有属性

返回A.塑造包含对象属性及其当前值得到

h =线型(' - ''*');sv = get(h)
sv = struct with字段:s​​tyle:' - '标记:'*'单位:'点'

返回A.塑造包含具有的属性民众setaccess.使用

s = set(h)
s =带有字段的结构:样式:{}标记:{}

线型班级定义了单位财产与setaccess =受保护。所以,s = set(h)不创建一个字段单位S.

无法返回具有非公开设置访问权限的可能值。

使用得到用手柄阵列

假设您创建了一系列线型对象:

h = [linetype('..''z'),线型(' - ''Q'
H = 1x2 LineType具有属性:样式标记单元

什么时候H是一系列手柄,得到返回一个(长度(h)-1)属性值的单元格数组:

cv = get(h,'风格'
cv = 2×1个单元阵列{'..'} {' - '}

什么时候H是一系列句柄,您不指定属性名称,得到返回A.塑造数组包含具有与属性名称对应的名称的字段。分配输出得到到一个变量时H不是标量。

sv = get(h)
SV = 2x1结构阵列与字段:样式标记单位

获得价值标记来自第二个数组元素的属性SV.结构数组:

SV(2).Marker
ans ='q'

句柄,名称和值阵列

您可以传递一组句柄,属性名称的单元格数组和属性值的单元格数组。属性值单元格数组必须为每个对象具有一行属性值H。每行必须为属性名称数组中的每个属性具有值:

h = [linetype('..''z'),线型(' - ''Q')];设置(h,{'风格''标记'},{'..''o';' - ''X'})

这个电话的结果是:

H(1)
ANS = LineType具有属性:STYLE:'..'标记:'O'单位:'点
H(2)
ANS =具有属性的线型:STYLE:' - '标记:'X'单位:'点'

自定义属性清单

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

  • setDisp.- 您打电话的时候没有输出参数和单个标量句柄输入,呼叫setDisp.确定如何显示属性列表。

  • getDisp.- 您打电话的时候得到没有输出参数和单个标量句柄输入,得到呼叫getDisp.确定如何显示属性列表。

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

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

继承的得到方法可以在没有含糊不相识的名称字符串产生的含糊之处解析不精确的属性名称。当部分属性名称模糊时,因为名称匹配多个属性,PartialMatchPriority.属性值可以确定Matlab匹配的属性。

默认优先级相当于partialmatchpriority = 1。减少属性的相对优先级,设置PartialMatchPriority.正整数值2或更大。属性的优先级随着价值而减少PartialMatchPriority.增加。

例如,在这个课堂上冗长属性与名称匹配的优先级更高版本财产。

Classdef.myclass 特性冗长结尾特性(partialmatchpriority = 2)版本结尾结尾

打电话给具有潜在模糊不适的名称的方法ver设置冗长由于其相对优先权较高。没有设置PartialMatchPriority.属性,模糊名称会导致错误。

a = myclass;设置(a,“ver”,10)Disp(a)
MyClass与属性:录音:10版本:[]

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

v = get(a,“ver”
v = 10.

案例和名称匹配

具有非匹配案例的全名匹配优先于与更高优先级属性的部分匹配。例如,此类定义了基线优先级为1(默认)和a的属性根据优先权的财产(低于1)。

Classdef.myclass 特性基线结尾特性(PartialMatchPriority = 2)基础结尾结尾

打电话给字符串的方法根据设置根据财产。基线优先级更高,但全名与错误案例匹配优先。

a = myclass;设置(a,“根据”,-2)disp(a)
MyClass具有属性:基线:[]基础:-2

添加新属性时减少不兼容

你可以使用PartialMatchPriority.属性以避免在添加新属性时引入代码不兼容。例如,此类启用得到方法是指的距离用字符串的财产dis因为这酌情分开财产优先率较低。

Classdef.行星%1.0版特性距离结尾特性(PartialMatchPriority = 2)酌情分开结尾结尾

Version 2.0课程介绍了一个名为的属性不连续性。防止在现有代码中导致模糊的部分属性名称,使用PartialMatchPriority.设置优先级不连续性低于以前现有的属性。

Classdef.行星%2.0版特性直径;nummoons = 0明显射下;距离比素;结尾特性(PartialMatchPriority = 2)酌情分开;结尾特性(partialmatchpriority = 3)不连续= false;结尾结尾

版本1.0行星班级,这个电话给了方法不是含糊不清的。

p =行星;套(p,“光盘”,真的)

但是,随着引入的不连续性属性,字符串圆盘变得暧昧。通过给予不连续性属性优先级较低,字符串圆盘继续匹配酌情分开财产。

笔记

在编写可重复使用的代码时,使用完整的区分大小写的属性名称避免含糊不清,请防止与后续软件版本的不兼容,并产生更可读的代码。

也可以看看

|||

相关话题