【发布时间】:2019-02-07 08:00:54
【问题描述】:
我想创建一个类(为简单起见),只要我更改类实例中的输入参数,它就会添加两个数字。为简单起见,我创建了这个类:
classdef test < handle
properties (Constant)
privatNummer = 10;
end
properties
brugerNummer;
sum;
end
methods
function obj = test()
obj.sum = method1(obj);
end
function obj = method1(obj)
obj.sum = obj.brugerNummer + obj.privatNummer;
end
end
end
当我给它一个新值时,如何让它自动更新 obj.sum?目前我每次想要更新 obj.sum 时都必须运行 obj.method1。
我已经尝试过这样的事情(但我就是无法让它工作):
classdef test < handle
properties (Constant)
privatNummer = 10;
end
properties
brugerNummer;
sum;
end
methods
function obj = test()
notify(obj,'StateChange')
obj.sum = method1(obj);
addlistener(obj.brugerNummer,'Ændret nummer',@RespondToToggle.method1);
end
function src = method1(src)
src.sum = src.brugerNummer + src.privatNummer;
end
end
events
StateChange
end
end
【问题讨论】:
-
你打算怎么给一个新号码?这对我来说不是很清楚。当你给一个新号码时,你必须调用一个函数。此功能也可以更新其他号码。您可能想查看属性设置器,它们是在您执行
obj.sum=2时调用的函数。您可能还想调查依赖属性,这是您尝试实现的。 -
嗨@CrisLuengo。我将创建一个脚本,在其中创建类的一个实例:
a = test;,然后我将更改a.brugerNummer = 10。我希望每次自动更改brugerNummer时都会计算a.sum。这是一个相当简单的例子。我正在尝试编写一个类,该类根据一个参数(温度、密度、绝热块模块等)计算任何给定介质中的速度声。 yeats 我一直在使用 Matlab,但是 oop 对我来说是新的。无论如何,感谢您的帮助!我肯定会研究属性设置器和依赖属性。 -
*音速... (:
-
@bgaard 正如@CrisLuengo 提到的,您可以为
sum属性实现Dependent Property。另一种选择可能是使用PostSet事件侦听器。简而言之,将brugerNumer的属性访问设置为SetObservable=true,然后添加一个事件侦听器addlistener(obj, "brugerNumer", "PostSet", @callbackFcn),然后定义回调函数(function callbackFcs(obj, source,event)...)来执行您所需的计算和修改其他属性。 -
您可以按照@Khlick 对事件侦听器的建议进行操作,或者您可以简单地定义一个方法
obj = set.brugerNummer(obj,value),在分配值时调用该方法。
标签: matlab events listener class-design