按类,按事件自动更改值

问题描述 投票:0回答:1

我想创建一个类(为简单起见),只要在类的实例中更改输入参数,就会添加两个数字。为简单起见,我创建了这个类:

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
matlab events listener class-design
1个回答
1
投票

我为这些问题开发了两种解决方案。第一个依靠Dependent properties,二传手和吸气者;第二个依赖于监听器和回调函数。

第一解决方案

classdef test
    properties (Constant)
        privatNummer = 10;
    end

    properties
        brugerNummer;
    end
    properties (Dependent)
        sum;
    end

    methods   
        function obj = test()
            % Constructor
        end     

        function value = get.sum(obj)
            value = obj.brugerNummer + obj.privatNummer;
        end
    end
end

第二个解决方案(这是一个真正的麻烦):

classdef test < handle
    properties (Constant)
        privatNummer = 10;
    end

    properties (SetObservable)
        brugerNumber;
    end
    properties
        sum;
    end

    methods
        function obj = test()
            % constructor
            addlistener(obj, 'brugerNumber', 'PostSet',@test.callbackFun);
        end

    end

    methods (Static)
        function callbackFun(~,evnt)
            obj = evnt.AffectedObject;
            obj.sum = obj.brugerNumber + obj.privatNummer;
        end     
    end
end
© www.soinside.com 2019 - 2024. All rights reserved.