如果我有以下接口结构;
public interface IPaymentTypeBase
{
void PayNow();
double Amount { get; set; }
}
public interface IPaymentTypePayPal : IPaymentTypeBase
{
string UserName { get; set; }
string Password { get; set; }
}
public interface IPaymentMethod<T>
{
}
然后我有以下课程;
public class PaymentTypePayPal : IPaymentTypePayPal
{
public string UserName { get; set; }
public string Password { get; set; }
public void PayNow()
{
throw new NotImplementedException();
}
}
public class PaymentMethod<T> : IPaymentMethod<T> where T : IPaymentTypeBase
{
}
然后在我的网络应用程序中,我有了这个;
IPaymentMethod<IPaymentTypePayPal> payer = (IPaymentMethod<IPaymentTypePayPal>) new PaymentMethod<PaymentTypePayPal>();
我现在想打电话给payer.PayNow();
,但我只是迷失在接口等界面,似乎无法使其发挥作用。
我认为这是一件简单的事情,但我只是错过了这一点。
有人可以帮忙吗?
修改
这里的目的是拥有一套界面,如PayPal,Voucher,CreditCard,所有这些界面都有自己的支付网关类型。
所以我想实例化一个以支付类型作为接口并调用接口PayNow方法的类。
答案 0 :(得分:1)
付款人的类型为IPaymentMethod<IPaymentTypePayPal>
。
但IPaymentMethod<T>
被定义为
public interface IPaymentMethod<T>
{
}
因此,它没有方法,您无法在其上调用PayNow()
。
PaymentMethod<T>
也是如此,因此您无法在PaymentMethod<PaymentTypePaypal>
的实例上调用任何方法。
也许你可以解释一下你的意图。
答案 1 :(得分:0)
我不太清楚为什么要使用这个PaymentMethod类...但是为什么你不能将接口IPaymentMethod修改为:
public interface IPaymentMethod<T> : IPaymentTypeBase
这样U可以调用patNow方法??
答案 2 :(得分:0)
就个人而言,只要涉及继承,我就会使用类而不是接口。此外,在这种情况下,你有更多的间接性,而不是你可能需要的。如果您将Payment定义为抽象基类(使用PayNow()和Amount)并将PayPalPayment作为子类,只需从工厂实例化适当的子类并设置,您可以灵活地使用您的方法,我认为,更容易理解和维护。 (并不真正了解您的应用程序的所有其他要求)