我有一位使用C#重构工具的同事。该工具出于某种原因表示:
this.Foo()
在
Foo()
现在我们已经让他把它关掉,因为让所有代码自动重写是很烦人的,但这不是重点。
我错过了什么,或者这是错的?为什么我想要this.Foo()
?
答案 0 :(得分:2)
如果您想使用它,请使用它。
如果您不想使用它,请不要使用它。
这里没有正确答案。
如果出于某种原因,您有一个命名约定,其中单独的名称不足以确定您是在查看局部变量,方法参数,实例字段,属性还是方法,那么您应该修复命名约定,而不是使用this.
为本地字段添加前缀,以区别于局部变量。
答案 1 :(得分:2)
我认为这归结为语法与语义的问题。 this.Foo()
的参数是非常明确地表示Foo()是什么以及它来自何处。不知道它是传递给方法的参数,还是声明who-know-where的静态类。它是当前对象的一个方法,周期。任何更少的东西,你放弃了明确的语义,支持更严格的语法。
反对它的明显论据:鼠标悬停和ctrl +点击。
答案 2 :(得分:2)
正如其他答案所指出的那样,这在很大程度上取决于风格。
很多时候,如果没有Foo()
,对this.
的调用就会毫不含糊,但有时可能会增加清晰度。例如:
EventHandler foo = GetEventHandlerFoo();
EventHandler baz = GetEventHandlerBar();
foo();
this.Bar();
baz();
在这种情况下,this.
前缀有助于使方法调用从委托调用中脱颖而出。
这是否必要?不,Lasse V. Karlsen正确地指出this.
只是命名约定的代名词,使其明确无误。
但是我发现我会经常在本地属性上使用this.Foo
前缀出于类似的原因,这又是一种风格问题。
答案 3 :(得分:1)
这是一种风格的东西。有时人们认为它使代码更清晰 - 显然有些人发现明确有关方法调用的目标是有帮助的。就个人而言,我发现虚假使用this
会分散注意力。
答案 4 :(得分:1)
此示例演示了this
关键字如何用于显式描述变量的范围:
class Item
{
int id;
public Item (int id)
{
this.id = id;
}
}
答案 5 :(得分:0)
我总是使用this.
,因为它明确地显示了事物的位置。我甚至没有使用重构工具来做到这一点。我手工打字。