假设我有以下课程:

classdef myClass < handle
    properties
        A = 1
    end
    methods
        function obj = myClass(val)
            obj.A = val;
        end
    end
end

假设我实例化了这个类的一个实例,然后稍微操作它,然后复制它由于它是一个句柄类,“copy”实际上只是同一对象的另一个实例:
>> q = myClass(10);
>> q.A = 15;
>> w = q;
>> disp(w.A)
   15

但我想看A而不需要实例化myClass天真地做
>> value = w.A

不起作用,因为这只是复制值;稍后的changningw.A不会更改value
有没有办法在不创建单独句柄类的情况下为w.A提供“指针”或“引用”我宁愿保留符号w.A而不是类似于w.A.value的东西(我必须创建handle类来包含该值)。
编辑:我使用此功能是为了帮助封装我的代码,以便与我的研究实验室一起使用。我正在设计MATLAB和Arduino之间的接口,以控制空中和地面车辆;我希望访问诸如“vehicle.pwmMax”、“vehicle.flightCeiling”等内容,以封装底层对象“vehicle.Globals.pwmMax.value”等。

最佳答案

你可以通过一个PropertyReference类来实现

classdef PropertyReference < handle
    %PropertyReference Reference to a property in another object
    properties
        sourceHandle
        sourceFieldName
    end

    properties (Dependent = true)
         Value
    end

    methods
        function obj = PropertyReference (source, fieldName)
            obj.sourceHandle = source;
            obj.sourceFieldName = fieldName
        end
        function value = get.Value( obj )
            value = obj.sourceHandle.(obj.sourceFieldName);
        end

        function set.Value( obj, value )
            obj.sourceHandle.(obj.sourceFieldName) = value;
        end
        function disp( obj )
            disp(obj.Value);
        end
    end
end

继续您的示例,然后可以使用PropertyReference,如下所示:
q = myClass(10);
>> q.A = 15;
>> ref = PropertyReference(q,'A');
>> disp(ref)
   15
>> q.A = 42;
>> disp(ref)
   42

PropertyReference类的使用有点尴尬,但原始类保持不变。
编辑-根据strictlyrude27注释添加disp函数重载

08-26 10:16