c# - 一种优雅的方式来做到这一点?可能是泛型?

标签 c# generics

我有两个派生类(Sale 和 ServiceCharge)。两者都是交易。如果我有一个 BusinessService,我想为它创建一个 ServiceCharge。如果我传递一个产品,我想实例化销售。

这是我的想法。

private void CreateInstance(object element)
{
    Transaction transaction;
    if (element.GetType() == typeof(BussinessService))
    {
        transaction = new ServiceCharge((BussinessService)element))
    }
    else
    {
        transaction = new Sale((Product)element);
    }
{

你能告诉我一个更优雅的方式吗?我会知道如何只使用一个构造函数来使用泛型

private void CreateInstance<T>(T element)
{
   Transaction transaction = new Transaction((T)element);
}

但我不知道如何处理第一种情况。

最佳答案

在这种情况下,一个简单的界面也可以工作:

interface ITransactionable
{
    Transaction CreateTransaction();
}

class BusinessService : ITransactionable
{
    public Transaction CreateTransaction() { return new ServiceCharge( this ); }
}

class Product : ITransactionable
{
    public Transaction CreateTransaction() { return new Sale( this ); }
}

private void CreateInstance(ITransactionable element)
{
   Transaction transaction = element.CreateTransaction();
   ...
}   

关于c# - 一种优雅的方式来做到这一点?可能是泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17681197/

相关文章:

c# - 如何在 Outlook 中区分我的约会和委托(delegate)人约会?

c# - 为什么这不能编译?

Swift 泛型 : parameters cyclic dependencies resolution

c# - 使用 String.IsNullOrEmpty(string) 和 Nhibernate 创建动态 Linq 表达式

Java6、Guava、泛型、类型推断

c# - 通过序列化 DataContract 将对象字段分离到两个文件中

c# - 如何同步两个 ScrollViewer?

c# - 尽管已禁用,但验证仍在显示

java - ArrayList 在 Java Collection Framework 内部是如何表示的?

c# - chromium - 在初始页面加载时发送自定义 header 信息 c#