C#自动实现的属性和局部变量的最佳实践,仅根据具体情况而有所不同?

让我给你举个例子:

public class MyClass { public string MyProperty { get; set; } public MyClass(string myProperty) { MyProperty = myProperty; // bad? this.MyProperty = myProperty; // good? } } 

我已经开始在这种情况下使用this ,因为我有轻微的偏执,单独依赖案例可能会让人感到困惑,或者更糟糕的是可能会导致错误。

这里的“最佳实践”是什么?

编辑:

到目前为止,听起来这比我想象的要主观得多。 我想人们会在一方或另一方强烈下来。

使用“ this. ”在任何课程中都是多余的。 这完全取决于您的开发商店设置使用它的标准。

使用“ this. ”的优点是,一些开发人员发现在阅读代码时更容易将它们与类实例相关联,正如您所提到的,在处理类似命名的项目时更清楚。

缺点是有些人认为它使你的代码文件变得混乱,如果你使用像ReSharper这样的工具,它们会默认将它标记为冗余代码。

正如womp所说。 “这”是多余的,但它使代码更容易阅读。 或者更难以误读。

C#绝对区分大小写,因此使用中没有风险……

MyProperty = myProperty;

那么我会寻找其他最佳实践,例如编写实现目标所需的最少量代码(同时进行自我记录)。 事实是,这不是必需的,极简主义者可能会说不管它。

这是我当前如何使用您的示例初始化属性(自动实现和不自动)

  public class MyClass { public string MyProperty { get; set; } public string AnotherProperty { get { return _anotherProperty; } set { _anotherProperty = value; } } private string _anotherProperty; public MyClass(string myProperty, string anotherProperty) { MyProperty = myProperty; // auto-implemented property initialization _anotherProperty = anotherProperty; //property with member variable initialization } } 

点击使用’this’超出我的规范。 我知道这是一个本地财产,因为它是资本化的。 所有属性都应该是资本化的。 我知道变量’_anotherProperty’因为下划线而具有类范围。 我曾经省略了类级变量的下划线。 当下划线存在时,我更容易阅读代码因为我立即知道范围而不必将鼠标hover在变量上以查看VS中工具提示中的声明。 此外,我通过省略下划线获得了为局部变量使用相同名称的好处。 这使您的初始化看起来很干净。 下划线的另一个好处是,您可以键入下划线并按ctrl +空格,并将所有类范围的变量分组。

在我的工作场所,编码标准要求将属性写成LikeThis,而局部变量则写成像这样。 由于C#区分大小写,因此这是一个很好的工具,用于区分变量。 但是,如果您发现自己的属性和局部变量具有完全相同的名称,则使用this关键字肯定会消除使用歧义。

你的两个选择都只依赖于案例……两者之间没有区别。

在我看来,这里的“最佳实践”是“不要那样做”。 如果我在我正在审查的代码中遇到它,我会立即标记它。 只有两种不同的变量只是等待发生的误解。 对于维护程序员来说,几个月或几年后很容易就会出现这种情况,并且无意中对myThing而不是MyThing

后来添加:

一位评论者要求我提出更换大/小写命名惯例的建议。 为此,我需要一个具体的例子。 假设您有一个只有一个属性的简单Book类: Title

 public class Book { public string Title { get; private set; } } 

现在你需要一个构造函数。 常见的约定是使用属性的小写版本:

 public Book(string title) { Title = title; } 

或者,如果你想确保没有歧义: this.Title = title

人们可以certificate这在构造函数中是可以的。 如果所有构造函数都如此简单,它可能就是这样。 但是我的经验是,当构造函数超出几行时, Titletitle之间的区别就会丢失。 当你在谈论构造函数以外的方法时,问题会变得更糟。 无论哪种方式,您都需要一个不同的约定。

用什么? 我在参数中使用过各种各样的缩写:例如ttl 。 或类似bookTitle东西,在使用Intellisense时更具描述性。 在我看来,要么优于使用仅根据情况不同的名称的惯例。