Автоматическое изменение значений, в случае класса, по событию - PullRequest
0 голосов
/ 01 сентября 2018

Я хотел бы создать класс, который (для простоты) добавляет два числа, как только я изменяю входной параметр в экземпляре класса. Для простоты я создал этот класс:

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.method1 каждый раз, когда я хочу обновить obj.sum.

Я пробовал что-то вроде этого (но я просто не могу заставить его работать):

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

1 Ответ

0 голосов
/ 03 сентября 2018

Я разработал два решения для проблем. Первый полагается на Dependent properties, сеттеры и геттеры; второй полагается на слушателей и callback-функции.

Первое решение:

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
...