覆盖继承中的空方法

时间:2012-11-28 15:09:33

标签: c# oop

需要一些OOP帮助。

我有一个由SendPayment() UpdateRecord()组成的基本付款,然后是实施不同付款格式的子类,例如PayPal,SagePay。

虽然所有人都有SendPayment()方法,但它们都以不同方式实施。所以我重写基类以在每个子类中应用我自己的实现。基类不包含任何实现只是空方法。这是一个很好的方法让OOP有空方法然后在每个子类中实现覆盖代码或删除基类中的空方法并在子类中使用这些方法吗?

感谢...

抱歉快速编辑。我确实将某些场景的基类用于示例计算。这包括所有付款类型,例如按费用计算产品数量以及从表格中删除记录。

3 个答案:

答案 0 :(得分:3)

我建议将您的基类设为abstract类,并将未实现的方法设为abstract方法。

    public abstract class BasePayment {

        //abstract method: unimplemented        
        public abstract void sendPayment();

        //implemented method    
        public void UpdateRecord(){
            .....
        }

    }

Abstract类适用于您希望混合使用已实现和未实现方法的场景。这里的一个额外优势是:每个扩展类都将被迫实现自己的sendPayment方法。

答案 1 :(得分:2)

如果您的子类在没有覆盖基本方法的情况下没有意义,请保留基本方法abstract

但是如果基类只包含抽象方法,并且没有任何状态(我认为这是你的情况)是使用接口更好,因为接口让实现者有权使用另一个基类

答案 2 :(得分:0)

没关系。但这取决于你将如何使用基类。您可以标记方法或类abstract,在这种情况下,所有子类都必须实现它们。如果将它们标记为virtual,则子类可以根据需要覆盖它们或保留为空。
如果不在基类中指定方法,则无法使用抽象和多态来实现所有功能。例如,如果您有付款清单(List<Payment>)(无论实际付款类型是什么),并且您想要发送所有付款,那么您将无法做到下一步:

foreach(Payment payment in payments)
{
   payment.SendPayment();
}