【问题标题】:How to use generic interface in an Factory如何在工厂中使用通用接口
【发布时间】:2012-11-02 15:54:32
【问题描述】:

我有一个工厂,它有一些用于生成报告的具体子类(.txt、.csv、.xls) 我想让具体类的接口是通用的,这样我就可以传入不同类型的参数(而不是 DataTable,我需要使用 DataSet 或其他一些类实例作为参数)。这是我的界面。

interface IReportCreator
{
    bool Create(DataTable dt);
}

我将界面设置为通用界面......就像下面的界面一样

interface IReportCreator<T>
{
    bool Create(T args);
}

现在我的问题是如何从工厂返回通用接口 我以前的工厂代码

class Factory
{
    static IReportCreator  GetReportCreator(string type)
    {
        IReportCreator reportCreator = null;
        if(type == "txt")
            reportCreator = new TextCreator(); 

        if(type == "csv")
            reportCreator = new CSVCreator();
    } 
}

在古老的.. 我这样称呼 IReportCreator repCreator = Factory.GetReportCreator("txt"); repCreator.Create(// arg); // 这里的参数我需要使它成为通用的 类工厂 { // 我不知道如何在这里返回接口.. }

任何帮助将不胜感激..

【问题讨论】:

  • 您能提供您之前的工厂代码吗?
  • public IReportCreator ReportCreator{get;set;} ?
  • 我已经放了我之前工厂的代码

标签: c# design-patterns generics


【解决方案1】:
interface IReportCreator<T>
{
  bool Create(T t);
}

class Factory
{
   public IReportCreator<T> Create<T>();
}

var factory = new Factory();
var reportCreator = factory.Create<DataTable>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多