C#,使用接口

Exp*_* be 2 c# asp.net interface

我正在尝试使用Interface类,我对Interface方法参数有疑问.

我有一个Interface类来使子类使用特定的方法.但是子类需要不同数量的参数.

例,

public interface IPayment
{
  void MakePayment();
}
Run Code Online (Sandbox Code Playgroud)

并在子类中定义MakePayment方法.

public class PayPay : IPayment
{
  public void MakePayment(string a); // it needs only one parameter
}

public class Google : IPayment
{
  public void MakePayment(string a, int b); // it needs two parameters.
}
Run Code Online (Sandbox Code Playgroud)

像上面的情况一样,我该如何修改我的接口类?

谢谢!

Fra*_*s P 8

一个干净的方法可能是简单地使用一个PaymentParameters类并使用一个名为的方法public void MakePayment(PaymentParameters params);


Bri*_*hon 7

更改您的界面以使用PaymentParameters类,该类包含每个不同服务可能需要的所有参数.

public interface IPayment 
{ 
   void MakePayment(PaymentParameters p);   
} 

public class PaymentParameters{
    public string A { get; set; }
    public int B { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

GooglePayPay实现将仅使用所需的参数PaymentParameters.


Bap*_*net 5

那么,接口的原理是不知道实现.所以接口的调用者将不知道这是否是一个GooglePayPay子类,并且将始终调用相同的方法.

但是如果你有更复杂的参数,你应该使用IPaymentParameters和这个原型的方法

public interface IPayment
{
     void MakePayment(IPaymentParameters parameters);
}
Run Code Online (Sandbox Code Playgroud)

两个实现GooglePayementParametersPayPayPaymentParameters