継承された各クラスのメソッドには、異なるタイプのパラメーターが必要です。この場合、すべての子メソッドが受け入れることができるように、インターフェイスメソッドでパラメータをどのように定義する必要がありますか?
public interface IPayment
{
void MakePayment(OrderInfo orderInfo); // !!
void MakeRefund (OrderInfo orderInfo); // !!
}
public class OrderInfo
{
protected string OrderNo {get; set;}
protected string CustomerNo { get; set;}
protected decimal Amount {get; set;}
}
public class CreditCardPaymentInfo : OrderInfo
{
string CCNum {get; set;}
string ExpDate { get; set;}
}
public class GooglePaymentInfo : OrderInfo
{
string GoogleOrderID {get; set;}
}
public class PaypalPaymentInfo : OrderInfo
{
string PaypalID {get; set;}
}
public void MakePayment()
{
IPayment paymentModule;
// Get Order Info
if(orderType == "Paypal"){
paymentModule = new PaypalPayment();
PaypalPaymentInfo orderInfo = new PaypalPaymentInfo();
orderInfo.PaypalID = "TEST";
}else if(orderType == "Google"){
paymentModule = new GooglePayment();
GooglePaymentInfo orderInfo = new GooglePaymentInfo();
orderInfo.GoogleOrderID = "TEST";
}else{
paymentModule = new CreditCardPayment();
CreditCardPaymentInfo orderInfo = new CreditCardPaymentInfo();
orderInfo.CCNum = "1111111111111111";
orderInfo.ExpDate = "11/11";
}
orderInfo.OrderNo = "123";
orderInfo.CustomerNo = "ABC";
orderInfo.Amount = 12.20m;
paymentModule.MakePayment();
}
エラーが発生します:
エラー1'com.WebUI.Models.CreditCardPaymentInfo'はインターフェイスメンバー'com.WebUI.Models.IPaymentProcess.makeRefund(WebUI.Models.RefundModel)'を実装していません
[編集]
モデルコードを忘れてしまった、こんな感じ、
public class CreditCardPayment: IPayment
{
public void MakePayment(CreditCardPaymentInfo creditCardPaymentInfo ){...}
//The parameter type is NOT OrderInfo
//public void MakePayment(OrderInfo orderInfo){...}
public void MakeRefund(CreditCardPaymentInfo creditCardPaymentInfo ){...}
}
ただし、CreditCardPaymentの場合、共通フィールドのみを含むOrderInfoではなくCreditCardPaymentInfoパラメーターを渡す必要があります。