改变属性的属性值类

17日视图(30天)
有办法改变一个类的属性不使用dynamicprops吗?我希望能够隐藏和显示属性基于对象是如何被使用的。类中定义的属性都被定义,但我不能找到一个方法来改变对象创建后的属性。
2的评论
丹尼尔·多兰
丹尼尔·多兰 2013年5月13日
是的,我在寻找一个“隐藏和显示”行为属性和方法(忘了提到过)。我想要一些相关类统一成一个主类,某些特性可以激活和不激活基于一个设置在一个特定的对象。

登录置评。

接受的答案

塞德里克Wannaz
塞德里克Wannaz 2013年5月13日
编辑:塞德里克Wannaz 2013年5月13日
我不认为这样 “隐藏和显示” 方法是声音/明智的。你可以实现任何逻辑方法不同所以他们工作取决于上下文,但是是什么意思“隐藏方法/属性”?不仅可以避免使用时不相关呢?很少有最终用户真正使用类/对象自省机制,在我看来这将是一个错误尝试隐藏那些做什么。实际上,作为一个用户,我更喜欢有一个干净的对象/类,触发一个错误()当我使用它的一个方法不当,比一个技巧类内省机制。
我不认为你可以动态地公开私人属性/方法,反之亦然。如果你真的想管理隐藏属性/方法,唯一的 技巧 我能想到的重载方法,字段名和属性。我不认为这是明智的超载元类,因为你无法轻易复制它的输出。
2的评论
塞德里克Wannaz
塞德里克Wannaz 2013年5月13日
编辑:塞德里克Wannaz 2013年5月13日
你可以创建一个类,当实例化时,创建一个类的对象B或C视上下文并将其存储为属性。然后你可以创建getter和setter方法,将管理访问属性的适当B或C(不是我最喜欢的解决方案),或过载SUBSASGN SUBSREF, SUBSINDEX,方法,属性,字段名,元类,和其他一些元素个数、长度、大小、阶级,最终,DISP,等等。这可能是一个有效的方法,如果实现,这将需要工作但不会遥不可及。
之间的区别这听起来我没有资格/明智的我第一次评论如下:如果你不得不从头过载元类并生成输出,你几乎可以肯定,它不会工作,因为元类的输出的复杂性;然而,如果你有其他类实例化并保存它作为财产,过载只需要输出内置的元类应用于属性,例如
. .。
属性
subObj
结束
. .。
方法
函数自我=(类型,变长度输入宗量)%的构造函数。
开关类型
情况……
self.subObj= B(varargin{:}) ;
情况……
self.subObj= C(varargin{:}) ;
其他的
错误(“嗯?”);
结束
函数varargout =元类(自我,变长度输入宗量)%过载。
varargout =元类(自我。subObj,变长度输入宗量{:});
结束
函数varargout =方法(自我,变长度输入宗量). .。结束
函数varargout =属性(自我,变长度输入宗量). .。结束
函数名称字段名=(自我,变长度输入宗量). .。结束
函数自我= subsasgn(自我,年代,价值). .。结束
函数印第安纳州= subsindex(自我). .。结束
函数varargout = subsref(自我). .。结束
函数s =大小(自我,变长度输入宗量). .。结束
函数n =元素个数(自我,变长度输入宗量). .。结束
函数l =长度(自我,变长度输入宗量). .。结束
函数=结束(自我、k ~). .。结束
函数disp(自我,变长度输入宗量). .。结束
函数国旗= iscolumn(自我,变长度输入宗量). .。结束
函数国旗= isfloat(自我,变长度输入宗量). .。结束
. .等
结束
我想这部分,要求更多的工作将SUBSASGN和SUBSREF(~ 1天的工作包括完整的测试对我来说),有“转移”索引(包括方法调用) self.subObj
建设这肯定会是一个不错的培训在MATLAB OOP,但我将继续作为一个侧/实验项目,肯定和建立一个漫长而详尽的测试脚本。

登录置评。

更多的答案(0)

类别

找到更多的在参数定义帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!