基本接口中定义的调用方法

时间:2011-06-14 04:11:19

标签: c# interface

如果我有以下接口结构;

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方法的类。

3 个答案:

答案 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作为子类,只需从工厂实例化适当的子类并设置,您可以灵活地使用您的方法,我认为,更容易理解和维护。 (并不真正了解您的应用程序的所有其他要求)