【发布时间】:2013-04-26 06:32:50
【问题描述】:
在我的子类中,我应该将继承的受保护非虚拟方法称为this.Method() 还是base.Method()?
使用this 可以让我轻松地使用同名的新方法隐藏该方法。只有在确定只需要调用基类的实现时,才应该显式地指定 base 方法调用?
【问题讨论】:
-
您应该在调用时始终调用 this.Method() 并从派生类中已实现的重写方法中调用 base::Method()。这样,将来当您覆盖某些内容时,您不必四处走动 base.Method();
-
它不是虚拟方法,不能被覆盖。非虚方法只能隐藏。
-
为什么不直接将其称为
Method()?如果this用自己的Method()隐藏它,那么它将被调用。如果没有,base.Method()将被调用。这被选为默认行为;可能有充分的理由。 ^_^ -
因为它是一个非虚拟方法,所以不涉及功能多态性。为了清楚起见,我会选择 base.Method。
-
@Kurian - 对我来说很奇怪,明确调用
this.Method()可读性较差。但如果 StyleCop 需要它,我会选择this.Method(),因为这是标准行为。
标签: c# oop inheritance virtual protected