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 に答える