有时,在引用同一类(或基类)的其他实例成员的实例成员中读取代码时可能会造成混淆:
public void MyMethod()
{
Where = did + AllTheseWeirdThings(GetDeclared()); // ?
}
有一个编码标准,例如“用”_“作为所有私有/受保护成员的前缀”没有帮助,因为实例成员仍然可以引用公共成员。
阅读本文会好得多:
public void MyMethod()
{
this.Where = this.did + base.AllTheseWeirdThings(this.GetDeclared()); // ?
}
有没有办法通过编译器选项,StyleCop或类似的东西来强制执行此操作?
答案 0 :(得分:6)
没有强制执行规则的编译器选项。
然而,粗略的Google搜索引出了这个StyleCop规则:http://www.thewayithink.co.uk/stylecop/sa1101.htm
ReSharper有类似的选择。
答案 1 :(得分:4)
在C#中,this和base是可选的。您需要使用它们的唯一时间(在此上下文中)是否存在歧义。没有编译器开关来改变这种行为。
我还建议不添加StyleCop规则。通常情况下,只有在必要时才使用this和base,例如在你可能写的构造函数中:
this.foo = foo;
强制使用“this”和“base”关键字不会使代码质量更好,或者更具可读性。如果您的代码如此混乱,以至于您无法确定成员的定义位置,我建议您重构它并使您的类更加简单。