引用类变量时,为什么人们会在它前面添加this
?我不是在谈论this
用于消除方法参数歧义的情况,而是在看似不必要时.
例:
public class Person { private String name; public String toString() { return this.name; } }
在toString
,为什么不直接引用name
的name
?
return name;
什么this.name
买什么?
这是一个stackoverflow问题,其代码已this
预先挂起.
防御性编程(如果有人编辑代码,以后会添加一个参数或带有冲突名称的本地
使代码"自我记录"更加明显
有时需要消除歧义:
public void setFoo(Bar foo) { this.foo = foo; }
在其他时候,这只是一种风格.总的来说,我尽量避免this.blah
使用,因为它更冗长.如果您想知道,结果字节码完全相同.
它在语言层面没有任何作用.但它确实可以立即指示某人阅读有关变量范围的代码,从而提高对代码的理解.
我经常看到人们这样做是因为它触发了智能感知.我个人更喜欢放弃"这个".因为它创造了更多没有任何价值的代码.
同样的原因,有些人喜欢用"m_"或名称接口"IFoo"来预置私有数据成员.他们相信它提高了可读性和清晰度.您是否同意这些惯例是一个品味问题.
在.NET世界中,Microsoft StyleCop工具还有一个名为"Prefix Local Calls With This"的规则:
只要代码包含对本地类的实例成员的调用或没有以"this"为前缀的基类,就会违反此规则.当存在基类成员的本地覆盖时,会发生此规则的例外,并且代码打算直接调用基类成员,绕过本地覆盖.在这种情况下,调用可以以"base"为前缀.而不是'这个'.
默认情况下,StyleCop不允许使用下划线或m_来标记本地类字段,而是支持'this'.字首.使用'this'的好处.它同样适用于所有元素类型,包括方法,属性等,而不仅仅是字段,使得对类成员的所有调用都可以立即识别,无论使用哪个编辑器来查看代码.另一个优点是它在实例成员和静态成员之间创建了一个快速,可识别的区别,它们不是前缀.
使用'this'的最后一个好处.输入前缀就是这个.将导致Visual Studio显示IntelliSense弹出窗口,使开发人员可以快速轻松地选择要调用的类成员.
我的建议是选择一个约定(使用或不使用)并坚持使用.