什么时候用’this’(C#)作为前缀的成员有什么好的规则?

如果我正在访问成员字段,属性或方法,我将永远不确定何时应该在“this”前面添加它。

我不是在询问需要它的情况,例如局部变量具有相同名称的情况。 我说的是意义完全相同的情况。 哪个更具可读性? 我应该遵循任何标准,最佳实践或经验法则吗? 它应该在整个类或整个代码库中保持一致吗?

我建议使用Microsoft的指南,经StyleCopvalidation: http : //blogs.msdn.com/sourceanalysis/

一般规则是,在成员之前添加“this”。 当它们在课堂上被定义时,除非它们是静态的,在这种情况下你不能。

以下是直接来自StyleCop的规则:

SA1101: The call to {method or property name} must begin with the 'this.' prefix to indicate that the item is a member of the class. 

我在这个问题上不同意StyleCop,我甚至不确定StyleCop的意见是否应该被解释为微软的官方指南。 它是Microsoft使用的内部工具,但并非所有团队都使用它,并非所有团队都使用所有规则。

在任何地方添加this都不是必需的,通常只会增加混乱。 它并没有提高性能,我不相信在代码中添加this都会提高可读性。

您可能会听到这样的论点,它更清楚地定义了变量的位置,但我认为如果您的类/方法如此冗长和复杂以至于难以确定某些内容被声明的地方,那么您可能应该重构它。 如果使用单一责任规则并具有短函数,则变量是成员,函数参数还是局部变量应该是显而易见的。

正如你所指出的,有时它是必要的。 例如,在构造函数中,如果要设置与参数同名的私有成员。

 public class Foo { private Bar bar; public Foo(Bar bar) { this.bar = bar; } } 

我会说尽可能避免,它可以节省一些(事实上很多)打字。

我更依赖Visual Studio帮助我找到属于哪里(永远不要忘记F12)。 我不使用记事本来读取我的cs文件:P

如果您遵循Microsoft的StyleCop ,则应始终使用带有this关键字的前缀类成员。

SA1101:PrefixLocalCallsWithThis
TypeName:PrefixLocalCallsWithThis
CheckId:SA1101类别:可读性规则

这是关于同一主题的类似StackOverflow问题 。

我通常用这个访问当前对象的参数。 给定实例变量“m_”的命名约定,这使得在不知道其上下文的情况下,可以一目了然地看到受以下语句影响的内容:

 m_Height += 10; // an instance variable height += 10; // a local variable this.Height += 10; // a property 

在我的代码中,我只使用这个。当属性是基类的成员时,而不是我当前所在的类。

当然,不使用’this’是另一种流行的选择,因为它是不必要的代码。

我们的工作编码标准规定,成员变量不应以“m”或“_”为前缀,也不应以大多数人使用的其他forms为前缀。 我实际上发现自己一直在使用this.memberVariable。 我更喜欢清晰度而不是额外打字。 正如其他答案中所提到的,在引用与成员变量同名的参数时,这是必要的。

如果您使用的是Visual Studio和Intellisense。 当您键入此内容时,您将获得仅列出类级变量方法等的列表。省略所有其他可能的项目。