假设类中的成员具有私有访问属性,即 GetAccess=private,如果我们使用“.”在重载的 subsref 方法中对该成员进行类型引用,则该成员的访问属性此时将变得无效。
--------------------- 那么,有没有一个好方法可以让用户既保留对属性的访问控制又重载索引方法呢?
如果您想重载
()
和/或 {}
索引而不影响 .
索引,您可以使用以下内容启动 subsref
函数:
if isequal(s(1).type, '.')
[varargout{1:nargout}] = builtin('subsref',obj,s);
end
如果第一个索引操作是
.
,这只会调用索引的内置(默认)实现。
当然,您也可以将这部分作为标准
switch
声明:
function varargout = subsref(obj,s)
switch s(1).type
case '.'
[varargout{1:nargout}] = builtin('subsref',obj,s);
case '()'
...
case '{}'
...
otherwise
error('Not a valid indexing expression')
参考:https://www.mathworks.com/help/matlab/matlab_oop/code-patterns-for-subsref-and-subsasgn-methods.html