我经常似乎来了这样一种情况,我有一个抽象类,其需要取决于它有哪些具体的实现以不同的方式处理其泛型类型参数的类型组件的类型。动态选择给
作为示例,abstract class Payment
可以被分类为class CreditCard
或class StoredCredit
。要真正处理付款,我们要使用的实现
interface IPaymentTaker {
PaymentProcessingResult Process(Payment payment); }
即要么
class CreditCardPaymentTaker : IPaymentTaker { ... }
或
class StoredCreditPaymentTaker : IPaymentTaker { ... }
在过去,我已经注入一个IDictionary到父组件和然后做
_paymentTakers[payment.GetType()].Process(payment);
这种方法的缺点是,IPaymentTaker
实现并不强类型的不够,所以这个过程方法的第一位必须是:
Process(Payment payment)
{
var creditCardPayment = payment as CreditCardPayment;
if (creditCardPayment == null)
throw new Exception("Payment must be of type CreditCard");
}
我敢肯定,必须有我的格局名试图实现,但我不知道它是什么!
理想我想
(一)能够实例仅仅基于支付的类型PaymentProcessor,而无需创建字典;
(b)能强类型PaymentProcessors只接受他们可以使用的子类。
没有人有解决这个问题的一种巧妙的方法?
这很完美!谢谢Jordao! – Gaz 2010-08-08 11:58:44