文件

属性访问方法

属性提供对类数据的访问

在MATLAB®,属性可以具有公共访问权限。因此,属性可以提供对类设计公开给用户的数据的访问。

使用属性访问方法来提供错误检查或实现属性访问产生的副作用。访问方法的示例包括在设置属性时更新其他属性值或在返回属性值之前转换属性值的格式的函数。

您可以使用属性验证来限制属性值的大小,类和其他方面。有关物业验证的信息,请参阅验证属性值

访问方法的性能考虑

每当访问属性值时,属性访问方法都会增加函数调用的开销。如果对属性的性能关键访问发生在类的方法中,则定义私有属性来存储值。在方法内部使用这些值而不进行任何错误检查。对于不太频繁的类外部访问,定义public依赖使用Access方法进行错误检查的属性。

有关使用的访问方法的信息依赖属性,看到依赖属性的访问方法

属性框架和getter方法

每当查询或分配属性值时,属性访问方法都会执行特定的代码。通过这些方法,您可以执行各种操作:

  • 在赋值属性执行以下操作之前执行代码:

    • 施加值范围限制(验证属性值的)

    • 检查正确的类型和尺寸

    • 提供错误处理

  • 在返回属性的当前值之前执行代码以执行如下操作:

要控制代码可以访问属性,请参阅属性的属性

MATLAB调用访问方法

笔记

不能直接调用属性访问方法。访问属性值时,MATLAB调用这些方法。

只要从Access方法外部设置或查询相应的属性值,属性访问方法会自动执行。MATLAB不递归递归访问方法。也就是说,MATLAB在将属性从其SET方法中设置属性时不会调用SET方法。同样,MATLAB在查询其GET方法中查询属性值时不会调用GET方法。

获取集合的函数句柄,并从属性获取访问方法meta.property.目的。这meta.property.setmethod.GetMethod属性包含引用这些方法的函数句柄。

访问方法限制

仅定义属性访问方法:

  • 对于具体属性(即非抽象属性)

  • 在定义属性的类中(除非该类中的属性是抽象的,在这种情况下,具体子类必须定义Access方法)。

MATLAB没有默认设置或获取属性访问方法。因此,如果您未定义属性访问方法,则在分配或返回属性值之前不会调用任何方法。

一旦定义,只有设置和获取方法可以设置和查询实际属性值。看调用set方法时有关MATLAB不调用属性集方法的情况的信息。

笔记

属性集并获取访问方法不等同于用户可调用得到方法,用于从类的实例设置和查询属性值。看实现属性的SET /获取界面有关用户可调用的信息得到方法。

访问方法不能调用函数来访问属性

您可以仅在属性集或获取访问方法中设置和获取属性值。您无法从集合或获取方法调用另一个函数并尝试从该函数访问属性值。

例如,调用另一个函数来执行实际工作的匿名函数不能访问属性值。类似地,访问函数不能调用另一个函数来访问属性值。

定义访问方法

访问方法具有包含属性名称的特殊名称。所以,得到的。propertyname.每当时执行propertyname.引用和放。propertyname.每当时执行propertyname.被分配了一个值。

在不指定属性的方法块中定义属性访问方法。您不能直接调用这些方法。MATLAB在任何代码访问属性时调用这些方法。

属性访问方法不会出现在由方法命令中不包含meta.class目的方法财产。

访问方法功能处理

房地产meta.property.对象包含属性集和get方法的函数句柄。setmethod.包含set方法的函数句柄。GetMethod包含GET方法的函数句柄。

获取这些句柄meta.property.对象:

mc =?班级名称;mp = findobj(mc.propertylist,'姓名''propertyname.');fh = mp.getmethod;

例如,如果类我的课为其定义一个get方法文本属性,您可以从中获取此功能的函数句柄meta.class对象:

mc =?myclass;mp = findobj(mc.propertylist,'姓名'“文本”);fh = mp.getmethod;

返回的值,FH.,包含针对指定类的指定属性名称定义的get方法的函数句柄。

有关定义函数句柄的信息,请参见创建函数处理

设置并获取方法执行和属性事件

MATLAB软件生成事件前后的set和get运算。您可以使用这些事件通知侦听器属性值已被引用或分配。事件生成的时间如下:

  • PreGet- 在调用property get方法之前触发

  • PostGet- 在属性Get方法返回其值后触发

如果类计算属性值(依赖于此=真实),则其set事件的行为类似于get事件:

  • 预设- 在调用属性集方法之前触发

  • -在调用属性集方法后触发

如果未计算属性(依赖= false,默认值),然后赋值语句和set方法生成事件:

  • 预设- 在在SET方法中分配新属性值之前触发

  • -在set方法中分配新的属性值后触发

有关使用属性事件的信息,请参阅创建属性侦听器

包含阵列的访问方法和属性

您可以使用包含包含阵列的属性的数组索引,而不会干扰属性集并获取方法。

对于索引参考:

val = obj。Propname.N.);

MATLAB调用get方法来获取参考值。

对索引的任务:

obj。Propname.N.) = val;

MATLAB:

  • 调用get方法来获取属性值

  • 对返回的属性执行索引赋值

  • 将新属性值传递给SET方法

访问对象的方法和数组

当引用或赋值发生在对象数组上时,MATLAB在循环中调用set和get方法。在这个循环中,MATLAB总是将标量对象传递给set和get方法。

使用访问方法修改属性值

属性访问方法在您希望在分配或返回属性值之前执行一些其他步骤的情况。例如试点类使用属性集方法检查值的范围。然后,如果它在特定范围内,它将缩放应用,并将其设置为如果不是。

Property Get方法在返回当前值之前应用比例因子:

Classdef.试点属性预期= []结尾属性(常数)ScalingFactor = 0.001结尾方法函数obj = set.expectedresult(obj,erin)如果erin> = 0 && erin <= 100 erin = erin。* obj.scalingfactor;obj.expectedresult = erin;其他的obj。expectedResult =南;结尾结尾函数er = get.expectedResult(obj) er = obj. expectedresult /obj. scalingfactor;结尾结尾结尾

相关的话题

这个话题有用吗?