C# 在C中,有没有强制使用“的方法?”;此/base";会员资格?

C# 在C中,有没有强制使用“的方法?”;此/base";会员资格?,c#,this,stylecop,C#,This,Stylecop,有时,在引用同一类(或基类)的其他实例成员的实例成员中读取代码可能会造成混淆: 有一个编码标准,比如“在所有私有/受保护的成员前面加上“\ux”,是没有帮助的,因为实例成员仍然可以引用公共成员 阅读以下内容会更好: public void MyMethod() { this.Where = this.did + base.AllTheseWeirdThings(this.GetDeclared()); // ? } 有没有一种方法可以通过编译器选项、StyleCop或类似的方式来实现这

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

有一个编码标准,比如“在所有私有/受保护的成员前面加上“\ux”,是没有帮助的,因为实例成员仍然可以引用公共成员

阅读以下内容会更好:

public void MyMethod()
{
    this.Where = this.did + base.AllTheseWeirdThings(this.GetDeclared()); // ?
}
有没有一种方法可以通过编译器选项、StyleCop或类似的方式来实现这一点?

在C#中,this和base是可选的。只有在出现歧义时才需要使用它们(在此上下文中)。没有编译器开关来更改此行为

我还建议不要添加StyleCop规则。通常最好在必要时只使用this和base,例如在构造函数中,您可以编写:

this.foo = foo;

强制使用“this”和“base”关键字不会提高代码的质量,也不会提高代码的可读性。如果您的代码非常混乱,以至于您无法确定成员的定义位置,我建议您重构它,并简化类继承权。

没有强制执行规则的编译器选项

但是,粗略的谷歌搜索会出现以下StyleCop规则:


ReSharper有一个类似的选项。

我曾经这样做过,但最终我发现它没有它所产生的噪音那么有用。我打开了这个ReSharper警告,发现它令人难以置信地恼火。事实证明,很少将类成员与本地人混淆,而
这个。
/
基通常是多余的。
Stylecop对
这个
前缀,但不是用于base。默认情况下它也是启用的。正如前面提到的,StyleCop会起作用,但我想指出的是,您不应该这样做。这个问题的一些上下文:这个/base限定是否是一个好主意,它绝对会使大型遗留代码库更具可读性。我们不是在讨论m做意大利面,我们谈论的是理解其他人的意大利面。解开意大利面完全是另一个讨论。:)字段通常是区分的,比如通过一个前导的底部,只是为了避免需要
这个。
。所以,是的,我同意这不是我们想要的规则。有时使用“this”和“base”“使代码质量更差。使用最初的示例,如果有必要将base.allthesWeirdThings()设置为虚拟,则现在必须搜索代码以删除对base.allthesWeirdThings()的调用,或者更可能的情况是,直到某些功能无法工作时才忘记。这就是我停止使用这个/base的原因。@Joel:我想说它经常会让事情变得更糟。@Colo:如果代码需要重构,但你没有重构,那么预期的结果是开发速度减慢,缺陷率增加。换句话说,如果你“太忙”而无法解决问题,你会变得更忙,而且不会有任何成效。@上校:我很乐意,因为我可以告诉他们真相,而不会因此而被解雇。技术债务被称为“技术债务”,因为非技术人员很难对其进行评估。因此,他们通常无法认识到它的全部范围,因此陷入困境。当然,如果你让他们这么做,当债务把你的发展速度拖得很慢时,你会受到完全的指责。@yodaj007:和我们其他人一样:如此。
this.foo = foo;