主要内容

属性访问方法

属性提供对类数据的访问

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

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

有关访问方法语法的特定信息,请参阅属性获取方法属性集的方法.

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

访问方法的性能考虑

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

有关使用的访问方法的信息依赖属性,看到设置和获取依赖属性的方法.

属性集和Get方法

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

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

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

    • 检查正确的类型和尺寸

    • 提供错误处理

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

要控制哪些代码可以访问属性,请参见属性的属性.

MATLAB调用访问方法

当您从访问方法外部设置或查询相应的属性值时,属性访问方法将自动执行。MATLAB不递归地调用访问方法。也就是说,当从属性的set方法中设置属性时,MATLAB不会调用set方法,不管修改的是类的哪个实例。类似地,当从属性自己的get方法中查询属性值时,MATLAB并不调用get方法。

笔记

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

获取集合的函数句柄,并从属性获取访问方法元属性反对元属性设置方法GetMethod属性包含引用这些方法的函数句柄。

访问方法限制

仅定义属性访问方法:

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

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

MATLAB没有默认的set或get属性访问方法。因此,如果不定义属性访问方法,MATLAB软件在分配或返回属性值之前不会调用任何方法。

定义后,只有set和get方法可以设置和查询实际属性值。请参阅调用Set方法时有关MATLAB不调用属性集方法的情况的信息。

笔记

属性集和获取访问方法与用户可调用方法不同设置得到方法,用于从类的实例设置和查询属性值。看到实现属性的Set/Get接口有关用户可调用的设置得到方法。

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

只能从属性集或get access方法中设置和获取属性值。不能从set或get方法调用其他函数并尝试从该函数访问属性值。

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

定义访问方法

访问方法具有包含属性名称的特殊名称。因此,得到的。属性名随时执行属性名引用和设置属性名随时执行属性名被赋予一个值。

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

属性访问方法不会出现在由方法命令中不包含meta.class对象方法所有物

访问方法函数句柄

房地产元属性对象包含属性集和get方法的函数句柄。设置方法包含set方法的函数句柄。GetMethod包含get方法的函数句柄。

获取这些句柄元属性对象:

mc=?类名;议员= findobj (mc。PropertyList,“姓名”,'属性名')fh=mp.GetMethod;

例如,如果类类名为其定义一个get方法文本属性,可以从meta.class对象:

mc=?MyClass;mp=findobj(mc.PropertyList,“姓名”,“文本”)fh=mp.GetMethod;

返回值,跳频,包含为指定类的指定属性名定义的get方法的函数句柄。

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

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

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

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

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

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

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

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

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

  • 预设-在set方法中指定新特性值之前触发

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

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

包含数组的访问方法和属性

可以对包含数组的属性使用数组索引,而不会干扰属性集和get方法。

对于索引参考:

val=obj。专有名称(N);

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

对索引的任务:

obj。专有名称(N) = val;

MATLAB:

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

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

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

对象的访问方法和数组

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

使用访问方法修改属性值

如果在分配或返回属性值之前要执行一些附加步骤,则属性访问方法非常有用测试点类使用属性集方法检查值的范围。然后,如果值在特定范围内,则应用缩放,并将其设置为如果不是。

属性get methods在返回其当前值之前应用比例因子:

classdef测试点属性expectedResult=[]终止属性(常数)缩放因子=0.001终止方法函数obj=设置预期结果(obj,erIn)如果erIn>=0&&erIn<=100 erIn=erIn.*obj.scalingFactor;obj.expectedResult=erIn;其他的obj。expectedResult =南;终止终止函数er = get.expectedResult(obj) er = obj. expectedresult /obj. scalingfactor;终止终止终止

相关的话题