用这个。访问内部班级成员?

时间:2010-03-17 09:32:02

标签: c# coding-style this

在互联网上,我看到很多使用它的代码。访问类的本地成员,如下所示:

private String _whatever;
public String Whatever
{
  get
  {
    return this._whatever;
  }
  set
  {
    this._whatever = value;
  }
}

public void DoSomething()
{
  String s = this.Whatever;
  this.DoSomething();
}

(不要指望代码做一些明智的事情。我只是想为“这个”展示一些不同的用途。)

我想知道为什么要这样做?为源添加更多清晰度?
或者只是浪费空间?

10 个答案:

答案 0 :(得分:9)

这一切都降低了个人偏好和良好做法。

在大多数情况下,这并不重要,但是当你碰巧有一个与私有字段同名的参数(这表明一个错误的命名约定)时,它可能很重要。

从我个人的角度来看,任何对参数或字段的变量引用或几乎任何变量都应该足够清晰而没有“this”限定符...只有当它不存在且你无法改变它才能使它成为现实所以,我用这个。

答案 1 :(得分:4)

StyleCop中有一条规则要求 - 人们似乎只是使用它;)

答案 2 :(得分:3)

奇怪的是,没有人提到这一点:它与IntelliSense的效果非常好。输入“this”。并弹出有效成员名单。我没有花太多时间来证明这一点,“好吧,它使标识符的范围变得明显”。

答案 3 :(得分:2)

IMO:

this._member 

是多余的

this.Property

是合理的。

答案 4 :(得分:1)

这样做是为了增加清晰度,特别是为了消除实例成员的参数歧义。就个人而言,我认为

  • 如果你使用在私有变量前加下划线的惯例,那么写这个._blah是浪费空间
  • 在方法调用前面是多余的
  • 在物业访问面前是否有意义是值得商榷的

总而言之,这是一个个人意见问题(尽管与其他事情一样,你应该保持一致并同意你的同事)。

答案 5 :(得分:1)

在此上下文中使用this是可选的,但它有助于消除歧义。代码生成器总是在这里使用this,比查找是否有必要更容易(很少见)。

程序员将其用作品味。

答案 6 :(得分:1)

要考虑的事情:

编译器不关心,即使我们不熟悉您的类结构,我们这些在您身后工作的人也会确切知道您的意思

答案 7 :(得分:0)

这是一个品味问题。一些开发人员通常使用this来表明引用的对象是类的内部对象。它只是合成糖。它还取决于项目的一些命名约定(例如,用下划线开始每个字段名称)。

答案 8 :(得分:0)

this写入distingish类数据的每个程序员都有自己的理由。有时是因为他们已经习惯了,有时候因为它是项目编码标准所要求的,也许他们正在使用像这样的工具格式代码......

另外,如果您在成员变量和参数或局部变量之间没有区别,就像在带有下划线的示例中那样,它很有用。只是风格问题。

答案 9 :(得分:0)

这是为了处理以下可能的情况:

private String value;
public String Whatever
{
    get
    {
        return this.value;
    }
    set
    {
        this.value = value;
    }
}

实际上,this.广泛用于以下示例中的情况:

struct MyStruct
{
    private int val1;
    private int val2;

    public MyStruct(int val1, int val2)
    {
        this.val1 = val1;
        this.val2 = val2;
    }
}

尽可能使用this.可使您的代码更清晰,并排除以下可能的错误:

private int myVar;
private void doSmth(int myVar)
{
    // Some code here ...
    myVar = 5; // Are you sure this is one you want to modify?
    // Some code here ...
}

然而,这不是一个严格的规则,可能与个人编码风格有关。