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

时间:2010-04-28 18:08:47

标签: c# coding-style

如果我正在访问成员字段,属性或方法,我无法确定何时应将其添加到“this”。

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

8 个答案:

答案 0 :(得分:15)

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

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

你可能会听到这样的论点,它更清楚地定义了变量的位置,但是我认为如果你的类/方法太长而且很复杂,以至于很难找到声明某些东西的地方,那么你可能应该重构一下无论如何。如果使用single responsibility rule并且函数较短,那么变量是成员,函数参数还是局部变量应该是显而易见的。

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

public class Foo
{
    private Bar bar;

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

答案 1 :(得分:13)

我建议使用Microsoft的指南,经StyleCop验证: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.

答案 2 :(得分:4)

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

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

答案 3 :(得分:1)

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

  

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

这是关于同一主题的similar StackOverflow question

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

如果您使用的是Visual Studio和Intellisense。当你输入这个时,你会得到一个只有你的类级变量方法等的列表。省略所有其他可能的项目。