首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按事件自动更改类实例中的值

按事件自动更改类实例中的值
EN

Stack Overflow用户
提问于 2018-09-01 23:57:10
回答 1查看 57关注 0票数 0

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

代码语言:javascript
复制
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。

我试过这样的东西(但我就是不能让它工作):

代码语言:javascript
复制
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
EN

Stack Overflow用户

回答已采纳

发布于 2018-09-03 05:30:45

我为这些问题开发了两个解决方案。第一个依赖于Dependent properties、setter和getter;第二个依赖于侦听器和回调函数。

第一个解决方案:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52129813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档