2

需要一点 OOP 帮助。

我有一个由SendPayment() UpdateRecord()实现不同支付格式的子类组成的基本支付,例如 PayPal、SagePay。

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

谢谢...

抱歉快速编辑。我确实将基类用于某些场景,例如计算。这涵盖了所有支付类型,例如按成本计算产品数量和从表中删除记录。

4

3 回答 3

4

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

    public abstract class BasePayment {

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

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

    }

Abstract类适用于您希望混合实现和未实现的方法的这种场景。这里的另一个好处是:每个扩展类都将被迫实现自己的sendPayment方法。

于 2012-11-28T15:11:52.060 回答
2

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

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

于 2012-11-28T15:11:58.673 回答
0

没关系。但这取决于您将如何使用基类。您可以标记方法或类abstract,在这种情况下,所有子类都必须实现它们。如果您将它们标记为virtual子类,则可以在需要时覆盖它们或留空。
如果您不在基类中指定方法,您将无法充分利用抽象和多态性。例如,如果您有付款列表 ( List<Payment>) (无论实际付款类型是什么),并且您想发送所有付款,您将无法执行以下操作:

foreach(Payment payment in payments)
{
   payment.SendPayment();
}
于 2012-11-28T15:20:37.833 回答