我在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
答案 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中你必须明确地做到这一点。