我应该默认使用`this`吗?

时间:2010-07-15 08:43:09

标签: c# coding-style

我们都知道this指的是一个类的实际实例......但在我看来,大多数人并没有使用它。那么,我应该使用它吗?

我对它的看法如下:由于this引用了类的实际实例,因此它应该用于访问该类的任何成员。

  public void(String newValue) {
        this.privateVariable = newValue;
  }

这应该保证该值不会分配给范围内具有相同名称的对象(无论如何也可能最终为未定义的行为)。但是,如果使用下划线将私有字段与非私有字段分开,该怎么办:

  public voud(String newValue) {
        _privateVariable = newValue;
  }
在这种情况下,{p> this似乎有点多余和不必要。

那么,是否有充分的理由使用或不使用this?或者我只是无所事事地绞尽脑汁?

9 个答案:

答案 0 :(得分:7)

我个人只在必要时才使用它,例如

public MyClass(string name)
{
    this.name = name;
}

我更喜欢从最自然的名称重命名参数或字段。我没有使用this,但在其他地方没有必要。话虽如此,这样做绝对没有伤害 - 如果你觉得它让你的代码更清晰,那就是使用它的一个很好的理由。

答案 1 :(得分:7)

没有人提到你必须使用 this如果要求是制作符合StyleCop的代码并且不违反可读性规则SA1101。根据文件,

  

只要代码包含对本地类的实例成员的调用或没有以“this”为前缀的基类,就会发生违反此规则的行为。

另外,在我看来,即使对于非StyleCop兼容的源代码,也必须鼓励使用this关键字,因为指定this会增加可读性并降低本地混合的风险(方法范围) )和类(对象范围)变量。

答案 2 :(得分:3)

您应该使用命名约定方法。 (带有非核心的那个。)

如果忘记“this”,使用“this”方法更改代码会有危险。

为什么呢?如果followin类中的MyMethod稍后被更改为包含一个名为“something”的局部变量,则编译器仍会编译,而代码不再符合预期。

class MyClass
{
    int something = 10;

    void MyMethod()
    {
        //...lots'a code here...

        something = 20;  //Which var is something pointing at?
    }
}

将其更改为以下内容将引入错误...

class MyClass
{
    int something = 10;

    void MyMethod()
    {
        int something = 0;
        //...lots'a code here...

        something = 20;  //Which var is something pointing at?
    }
}

因此,除非所有开发人员都在为您的团队工作,共享代码,否则永远都会记住“这个”;不要这样!

答案 3 :(得分:2)

我个人确保我从未在类成员和本地声明的变量之间发生名称冲突。这意味着我从不使用它。然而,这完全取决于可读性。如果您认为“this”会使您的代码更直观易懂,那么请使用它,如果不是,则不要使用它。

答案 4 :(得分:2)

我喜欢使用this.,因为它会带来intellisene,这意味着我经常可以输入方法的几个字母,变量和自动完成 - 这样可以更快地编写代码!

答案 5 :(得分:1)

我没有使用字段与本地人的特殊指标(它们都很难看)。我发现,如果越来越难以跟踪哪些是我更好的服务,通过分解方法缩短与较少的本地状态。 (一个例外是参数的自然名称与字段匹配 - 最常见于构造函数 - 然后使用this.消除歧义。)

编辑:添加了一个例外(感谢其他答案提醒我)。

答案 6 :(得分:1)

我的两分钱:下划线很难看!

=>字段只是camelCase

=>与camelCase局部变量混淆是可能的

=>始终符合this

的条件

答案 7 :(得分:1)

我曾经一直使用this - 可能是来自pythons显式self参数的习惯。我想提醒我何时使用实例状态。

使用JetBrains的Resharper让我制造了这种习惯,因为它总是将this标记为冗余。

答案 8 :(得分:0)

这是主观的,但除非提供明确性,否则我不愿意拥有它。

使用不必要的this就像是在说“创建新人”。

您选择:)

相关问题