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不会使代码更具可读性,并且除非必要,否则应该避免所有情况- 例如我在上面描述的情况.
Rui*_*iro 17
我不确定使用这是不好的做法.然而,基础不是好的或坏的做法,而是语义问题.而这是多态的,也就是说即使使用它的方法属于基础类,它将使用覆盖方法,基础是没有的.base总是引用调用它的方法的基类定义的方法,因此它不是多态的.这是一个巨大的语义差异.然后应该相应地使用base.如果您想要该方法,请使用base.如果您希望调用保持多态,请不要使用base.
另一个需要考虑的重点是,虽然你目前还没有覆盖那种方法,但这并不意味着你将来也不会用你的所有来电为基础.如果不对所有通话执行查找和替换,您将无法获得新功能.
虽然使用此接口调用.除了减少/增加可读性(忽略范围内两个变量具有相同名称的情况)之外,它不会做任何事情.前缀将更改您在许多常见方案中编写的代码的功能.所以我永远不会添加基础.除非需要.