Foo()vs this.Foo()

时间:2011-04-14 19:54:04

标签: c# refactoring

我有一位使用C#重构工具的同事。该工具出于某种原因表示:

this.Foo()

Foo()

现在我们已经让他把它关掉,因为让所有代码自动重写是很烦人的,但这不是重点。

我错过了什么,或者这是错的?为什么我想要this.Foo()

6 个答案:

答案 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.,因为它明确地显示了事物的位置。我甚至没有使用重构工具来做到这一点。我手工打字。