3

レポートを生成するための具体的なサブクラス (.txt、.csv、.xls) を持つファクトリがあります。具体的なクラスのインターフェイスをジェネリックにして、diff 型のパラメーター (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();
    } 
}

そして、cientで..私はこのように呼び出します IReportCreator repCreator = Factory.GetReportCreator("txt"); repCreator.Create(// 引数); // ここで、ジェネリック クラス Factory として作成する必要がある引数 { // ここでインターフェースを返す方法がわかりません.. }

どんな助けでも大歓迎です..

4

1 に答える 1

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

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

var factory = new Factory();
var reportCreator = factory.Create<DataTable>();
于 2012-11-02T07:28:29.897 に答える