【发布时间】:2011-02-13 11:50:37
【问题描述】:
如果我正在访问成员字段、属性或方法,我永远不确定何时应该在其前面加上“this”。
我不是在询问需要它的情况,例如局部变量具有相同名称的情况。我说的是含义完全相同的情况。哪个更具可读性?有没有我应该遵循的标准、最佳实践或经验法则?它应该在整个类还是整个代码库中保持一致?
【问题讨论】:
-
恕我直言,只要您保持一致,无论哪种方式都很好。
标签: c# coding-style
如果我正在访问成员字段、属性或方法,我永远不确定何时应该在其前面加上“this”。
我不是在询问需要它的情况,例如局部变量具有相同名称的情况。我说的是含义完全相同的情况。哪个更具可读性?有没有我应该遵循的标准、最佳实践或经验法则?它应该在整个类还是整个代码库中保持一致?
【问题讨论】:
标签: c# coding-style
在这一点上我不同意 StyleCop,而且我什至不确定 StyleCop 的意见是否应该被解释为微软的官方指南。它是 Microsoft 使用的内部工具,但并非所有团队都使用它,也不是所有团队都使用所有规则。
没有必要在任何地方添加this,而且通常只会增加混乱。它不会提高性能,我不相信在代码中添加this 也会提高可读性。
您可能会听到这样的论点,即它可以更清楚地定义变量的定义位置,但我认为如果您的类/方法太长且太复杂以至于难以确定声明的位置,那么您可能应该重构无论如何。如果您使用single responsibility rule 并且有简短的函数,那么变量是成员、函数参数还是局部变量应该是显而易见的。
正如您所指出的,有时这是必要的。例如在构造函数中,如果你想设置一个与参数同名的私有成员。
public class Foo
{
private Bar bar;
public Foo(Bar bar)
{
this.bar = bar;
}
}
【讨论】:
我建议使用 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.
【讨论】:
我会说尽可能避免,它可以为您节省一些(实际上很多)打字。
我将更多地依赖 Visual Studio 来帮助我找到属于的位置(永远不要忘记 F12)。我不使用记事本阅读我的 cs 文件:P
【讨论】:
如果您遵循 Microsoft 的 StyleCop,则应始终使用带有 this 关键字的前缀类成员。
SA1101:PrefixLocalCallsWithThis
类型名称:PrefixLocalCallsWithThis
CheckId:SA1101 类别:可读性规则
这是同一主题的similar StackOverflow question。
【讨论】:
我通常用这个来访问当前对象的参数。给定实例变量“m_”的命名约定,这使得在不知道其上下文的情况下,可以很容易地一目了然地看到以下语句的影响:
m_Height += 10; // an instance variable
height += 10; // a local variable
this.Height += 10; // a property
【讨论】:
m_height = height 而不是this.height = height。 /耸肩
在我的代码中,我只使用这个。
当然,完全不使用“this”是另一种流行的选择,因为它添加了不必要的代码。
【讨论】:
我们在工作中的编码标准规定成员变量不应以“m”或“_”或大多数人使用的任何其他前缀。实际上,我发现自己一直在使用 this.memberVariable。我更喜欢清晰而不是额外的打字。正如其他答案中提到的,在引用与成员变量同名的参数时,这是必要的。
【讨论】:
如果您使用的是 Visual Studio 和 Intellisense。当您键入此内容时,您会得到一个仅包含您的类级别变量方法等的列表。忽略所有其他可能的项目。
【讨论】: