如何在matlab中的公共方法中使用私有方法

时间:2014-08-11 15:24:11

标签: matlab

我在Matlab类中有几个方法。我在其中一些方法中访问其中的一些但不知何故,为了调用这些方法,我需要放置" instaceName。"在方法名称的开头。我有c#背景,感觉不舒服。在C#中,可以定义不同级别的方法可见性。

classdef SampleClass
%UNTITLED2 Summary of this class goes here
%   Detailed explanation goes here

properties
    result ;
end

methods
    function method1 (obj, a , b) 
       obj.result = obj.method2 (a,b) ;
    end
end
methods (Access= private)
    function y = method3 ( a , b)
        y = a + b ; 
    end  

    end   

end

如果我将方法定义为静态,我想在该类内部使用,那么它是否有效。 是否有建议处理这个问题。

classdef SampleClass
    %UNTITLED2 Summary of this class goes here
    %   Detailed explanation goes here

    properties
        result ;
    end

    methods
        function method1 (obj, a , b) 
           obj.result = SampleClass.method2 (a,b) ;
        end      

    end

    methods (Static)
        function y = method2 ( a , b) 
            y = a + b ; 
        end      

    end

end

1 个答案:

答案 0 :(得分:1)

不幸的是,您提到的问题没有解决方法。类方法签名必须始终通过"实例"进入自己:

function output = DoSomething(this, arg1, arg2)

有几种方法可以调用类方法(例如,从类MyClass中获取上述方法DoSomething):

my_instance = MyClass(...);

% Call type 1
output = my_instance.DoSomething(arg1, arg2)

% Call type 2
output = DoSomething(my_instance, arg1, arg2)

2型感觉更直观,与功能签名一致。

在您的示例中,实例方法和静态方法都是可互换的,因为您没有使用方法属性。但情况并非总是如此:静态方法无法访问类的私有/受保护属性。

额外注意:据我所知,许多OO语言都是在幕后做同样的事情(C ++和C#自动将实例参数添加到方法中,但如果我错了,请纠正我)。唯一的区别是在Matlab中你必须明确地做到这一点。

C++ explanation