C# 用这个。访问内部类成员?

C# 用这个。访问内部类成员?,c#,coding-style,this,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(

在互联网上,我看到很多使用这个的代码。要访问类的本地成员,请执行以下操作:

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

public void DoSomething()
{
  String s = this.Whatever;
  this.DoSomething();
}
(不要期望代码做一些合理的事情。我只是想展示“this”的一些不同用法。)

我想知道为什么要这样做?要使来源更加清晰?

还是仅仅是浪费空间?

这一切都归结为个人偏好和良好实践

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


从我个人的观点来看,任何对参数或字段的变量引用,或者几乎任何东西,如果没有“this”限定符,都应该足够清楚。。。只有当它不是并且您无法更改它使其成为这样时,我才使用它。

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

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

编写
以区分类数据的每个程序员都有自己的原因。有时是因为他们习惯了,有时是因为项目的编码标准要求,也许他们正在使用这样的工具格式化代码

此外,如果您没有在成员变量和参数或局部变量之间进行区分(如在带有下划线的示例中),那么它是有用的。只是一个风格问题。

IMO:

this._member 
是多余的

鉴于

this.Property

是合理的。

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

  • 如果您使用在私有变量前面加下划线的惯例,那么写这个是浪费空间
  • 在方法调用之前,这是多余的
  • 在物业访问前,这是否有意义仍有争议

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

在这种情况下使用
这个
是可选的,但它有助于消除歧义。代码生成器将始终在此处使用,这比查找是否有必要(很少)要容易得多


程序员使用它是出于品味。

奇怪的是,没有人提到这一点:它与IntelliSense的配合非常好。键入“this.”并弹出有效成员名称的列表。我很快就用“好吧,它使标识符的范围变得明显”来证明这一点。这是为了处理以下可能的情况:

private String value;
public String Whatever
{
    get
    {
        return this.value;
    }
    set
    {
        this.value = value;
    }
}
实际上,
此。
广泛用于以下示例中的情况:

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 ...
}
然而,这不是一个严格的规则,可能与个人编码风格有关。

需要考虑的事项:


编译器不会在意,即使我们不熟悉您的类结构,我们这些在您背后工作的人也会确切知道您在做什么

是的,并且有一条Resharper规则说它是不需要的,可以删除-请选择!我只是告诉re sharper忽略它,让StyleCop赢得这一场;)我不是在争论这是一条好规则还是一条坏规则——只是它确实存在,我确信这就是为什么这么多人遵循它;)我不会说“更安全”(编译器肯定可以处理它,或者您需要不同的编译器/语言);'更清晰的“/”更清晰的“听起来更适用。我添加了另一个示例来说明“更安全”的含义。但是我同意用“更清晰”来代替“更安全”。一个好的编译器应该在最后一个例子中用一个错误来报告歧义。在我看来,参数和成员使用相同的名称是“不好的”。