强制显式使用 this/self 指针有什么好处?
-
05-09-2019 - |
题
拥有什么优势 this
/self
/me
指针 强制的 明确的?
根据 面向对象编程 理论上,方法应该主要(仅?)对成员变量和方法的参数进行操作。继此之后,应该是 更轻松 引用成员变量而不是外部(从对象的角度来看)变量......显式的 this
使其更加冗长 更难 引用成员变量而不是外部变量。这对我来说似乎违反直觉。
解决方案
在除了成员变量和方法参数时,还具有局部变量。一个关于对象的最重要的事情是它的内部状态。明确的成员变量解除引用使你正在引用该状态和在要修改状态时,它很清楚的,其中
例如,如果你有类似的代码:
someMethod(some, parameters) {
... a segment of code
foo = 42;
... another segment of code
}
在通过它快速浏览,你必须有在前面的段定义知道,如果它只是一个临时变量或者它发生变异的对象状态变量的心智模式。而this.foo = 42使得它明显的是,对象状态被突变。如果取消引用明确的专门使用,你可以肯定的是,变量是在相反的情况是暂时的。
短,以及分解方法使它有点不那么重要了,不过,长期的可理解性胜过一点点的方便而写的代码。
其他提示
如果你说的是“明确的 self
“从 Python 的意义上来说,这是一个 有趣的讨论 关于这个话题。这是 吉多回应 到 布鲁斯·埃克尔的文章. 。对布鲁斯文章的评论也很有启发性(无论如何,其中一些评论)。
您需要它别处通过指针/参考当前对象或防止自赋值在赋值运算符。
如果自变量的方法具有相同的名称作为成员变量?然后你可以使用this.x = x
例如。其中this.x
是成员变量和x
是该方法的参数。
这只是一个(简单)的例子。
我一般用此(在C ++),只有当我写在赋值运算符或的拷贝构造强>,因为它有助于在明确确定的变量。在那里我能想到用它的其他的地方是,如果你的函数的参数变量名是相同的成员变量的名字或我想用杀我的对象的删除
例如将是其中成员名称是相同传递给方法
public void SetScreenTemplate(long screenTemplateID, string screenTemplateName, bool isDefault)
{
this.screenTemplateID = screenTemplateID;
this.screenTemplateName = screenTemplateName;
this.isDefault = isDefault;
}