检查和编辑对象的私有/受保护属性
Posted
技术标签:
【中文标题】检查和编辑对象的私有/受保护属性【英文标题】:Inspecting and editing private/protected properties of objects 【发布时间】:2011-12-12 02:58:25 【问题描述】:在 MATLAB 2011b 中,我有一些类具有许多私有或受保护的类属性。这是设计使然,因为除了我的班级自己的 getter/setter 之外,我不希望它们可以被其他任何东西查看、读取、写入等。
但是,在开发过程中,有时我想查看这些属性的状态。可以在工作区中检查类对象,但是当我通过双击工作区中的对象访问 变量编辑器 工具时,没有任何私有/受保护属性可见。
我可以理解这可能是设计使然,但我希望有一个我缺少的设置可以让我查看它们。
【问题讨论】:
当一个类正在开发中时,我将所有属性都设置为 public - 我希望能够看到它们。 调试的时候为什么不设置成public呢? 是的,当然设置为公共作品。仅仅为了调试我的代码而被要求这样做似乎是错误的。在其他语言(C、C++ 等)中,调试器对私有/受保护变量毫无疑虑。我只是希望有一个我忽略的方便功能。 @RyanEdwards:事实证明,调试器在查看 Matlab 中的私有/受保护变量时也没有疑虑。 【参考方案1】:如果您不想修改属性以进行调试,则可以改为使用调试器检查私有/受保护变量。为方便起见,您甚至可以编写一个让您进入调试器的方法,这样您就不必手动设置停止:
classdef testObj_debug
properties (Access=private)
p1 = 4;
end
methods (Hidden)
function checkProps(obj)
keyboard
end
end
end
如果您调用to = testObj_debug, to.checkProps
,您将访问调试模式,其中隐藏属性p1
是可访问和可检查的。
【讨论】:
使用 checkProps 方法进入对象并四处窥探的绝妙技巧。谢谢。 您是否知道我可以将 checkProps() 方法放入父类并让我的所有类继承它的位置?这将是使用此工具的一种更方便的方法,无需将其添加到我感兴趣的每个类中。 @RyanEdwards:我有两个主要的父类:myHandle
和 myValue
。它们包含我希望每个类都拥有的所有方法。因此,对于句柄类,我写classdef someHandleClass < myHandle
,对于someHandleClass
的子类,我写classdef mySub < someHandleClass
,一切都会被继承。
@Jonas,我尝试了将checkProps
方法放在基类中并使用派生类继承它的技巧,但似乎基类方法无法访问私有/受保护的成员派生类。据我所知,checkProps
方法必须显式写入您想要使用它的每个类中。这和你的理解不谋而合吗?我正在使用 Matlab 2014b(预发布版)。
@DanielGolden:我有点惊讶您无法从继承的函数中访问这些属性,但只要该方法在您将其复制粘贴到其他类时有效,我想它可以完成这项工作。以上是关于检查和编辑对象的私有/受保护属性的主要内容,如果未能解决你的问题,请参考以下文章