我有一个名为BasePaymentTransactionData
的类和几个继承它的类。我需要将数据映射到此类的实例,我调用transaction
。问题是我必须检查事务是否是特定类型,然后调用相关的重载函数
这是我的代码:
class BasePaymentTransactionData { }
class CreditCardPrimaryRequestData : BasePaymentTransactionData { }
class transaction
{
CreditCardPrimaryRequestData Map(CreditCardPrimaryRequestData transaction)
{
return transaction;
}
private BasePaymentTransactionData MapTransactionObject(BasePaymentTransactionData transaction, NameValueCollection parameters, string transactionType, string paymentMethod)
{
//BasePaymentMapping
//Specific Mapping
if (transaction is CreditCardPrimaryRequestData)
transaction = Map(transaction as CreditCardPrimaryRequestData);
// many more derived types ...
return transaction;
}
}
我希望有可能做类似
的事情transaction = Map(transaction)
代码会识别它的类型并将其发送到正确的方法。有没有办法做到这一点,或者我能做的最好?
另外,我知道最好只创建一个接口,并创建一个虚拟的Map()方法,然后调用它,但不幸的是我无法做到这一点,因为我正在处理大量的代码这是框架级别,不是我设计的
答案 0 :(得分:1)
您可以使用DLR dynamic dispatch功能:
private BasePaymentTransactionData MapTransactionObject(BasePaymentTransactionData transaction, NameValueCollection parameters, string transactionType, string paymentMethod)
{
transaction = Map((dynamic)transaction);
return transaction;
}
但请确保除了特定的Map
重载之外,您还有类似的内容,否则您将获得例外:
BasePaymentTransactionData Map(BasePaymentTransactionData t)
{
return t;
}
更好的类型安全方式是实现双重调度(Visitor Pattern),但需要更多编码。