如果我正在访问成员字段,属性或方法,我无法确定何时应将其添加到“this”。
我不是在询问需要它的情况,例如局部变量具有相同名称的情况。我说的是意义完全相同的情况。哪个更具可读性?我应该遵循哪些标准,最佳实践或经验法则?它应该在整个班级或整个代码库中保持一致吗?
答案 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。当你输入这个时,你会得到一个只有你的类级变量方法等的列表。省略所有其他可能的项目。