在C#中,有没有办法在实例成员中强制使用“this / base”资格?

时间:2010-08-14 18:12:44

标签: c# this stylecop

有时,在引用同一类(或基类)的其他实例成员的实例成员中读取代码时可能会造成混淆:

public void MyMethod()
{
    Where = did + AllTheseWeirdThings(GetDeclared()); // ?
}

有一个编码标准,例如“用”_“作为所有私有/受保护成员的前缀”没有帮助,因为实例成员仍然可以引用公共成员。

阅读本文会好得多:

public void MyMethod()
{
    this.Where = this.did + base.AllTheseWeirdThings(this.GetDeclared()); // ?
}

有没有办法通过编译器选项,StyleCop或类似的东西来强制执行此操作?

2 个答案:

答案 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”关键字不会使代码质量更好,或者更具可读性。如果您的代码如此混乱,以至于您无法确定成员的定义位置,我建议您重构它并使您的类更加简单。