使用"基础"不良做法,即使它可能有利于可读性?

AJ.*_*AJ. 12 c# resharper coding-style

我知道这是一个主观问题,但我总是对编码风格的最佳实践感到好奇.在实现类中调用基本方法之前,ReSharper 4.5给出了关键字"base"的警告,即

base.DoCommonBaseBehaviorThing();
Run Code Online (Sandbox Code Playgroud)

虽然我很欣赏"越少越好"的心态,但我也花费了大量时间来调试/维护高度链接的应用程序,并且感觉通过查看成员调用对于基础对象可能会有所帮助.当然,改变ReSharper的规则很简单,但你们怎么想?在调用基础成员时应该使用"base"吗?

Ran*_*pho 22

您应该使用的唯一时间base.MethodCall();是在子类中具有相同名称的重写方法,但实际上您想要在父类中调用该方法.

对于所有其他情况,只需使用MethodCall();.

关键词喜欢this并且base不会使代码更具可读性,并且除非必要,否则应该避免所有情况- 例如我在上面描述的情况.

  • 过度使用基础的问题不仅仅是可读性吗?在我看来,从更广泛的意义上讲,它实际上是一个可维护性和可理解性的问题.例如,如果你到处都有基数,你必须在很多地方进行更改,例如,你添加一个覆盖,因为现在你真的不想要基数.编译器不会告诉你有问题.你真的每次都记得这个吗??? (7认同)
  • 关于'这个'的评论被低估了.在处理实例和静态方法时,'this'关键字可显着提高代码可读性. (6认同)
  • "不要让代码更具可读性,应该避免"......至少设置了主观标记 (3认同)
  • 在任何人关心之后很久就会有评论的风险,如果你遵循在私人领域面前设置下栏的典型惯例,那么使用"this"几乎没有什么好处.同样. (2认同)

Rui*_*iro 17

我不确定使用是不好的做法.然而,基础不是好的或坏的做法,而是语义问题.而是多态的,也就是说即使使用它的方法属于基础类,它将使用覆盖方法,基础是没有的.base总是引用调用它的方法的基类定义的方法,因此它不是多态的.这是一个巨大的语义差异.然后应该相应地使用base.如果您想要方法,请使用base.如果您希望调用保持多态,请不要使用base.

  • 我想添加以下内容:通过不必要地使用base,如果稍后覆盖类中的方法,则代码将调用基本方法而不是您刚刚覆盖的方法. (2认同)

Mar*_*ris 6

另一个需要考虑的重点是,虽然你目前还没有覆盖那种方法,但这并不意味着你将来也不会用你的所有来电为基础.如果不对所有通话执行查找和替换,您将无法获得新功能.

虽然使用此接口调用.除了减少/增加可读性(忽略范围内两个变量具有相同名称的情况)之外,它不会做任何事情.前缀将更改您在许多常见方案中编写的代码的功能.所以我永远不会添加基础.除非需要.