1

グリッドに関連するすべてのタスクに対して 1 つのインターフェイスが必要です。タスクはこのインターフェイスを実装します。

public interface IDataForGrid<T>
{
    IGridResponse<T> GetList(IGridRequest request);
}

T 型は常に DTO クラスです。この DTO には共通のインターフェイスがないため、共通のインターフェイスを作成できません。特定のプロパティを持つ単なる DTO です。

私はこのようにそれを使用したいと思います:

public class Service1
{
    public IGridResponse CreateResponse(IGridRequest request)
    {

        ...
        IDataForGrid<T> aa;

        if(request == 1) aa = new CustomerGridData;
        if(request == 2) aa = new OrderGridData;

        var coll = aa.GetList();
    }
}

public class CustomerGridData : IDataForGrid<CustomerDTO>
{
   ...
}

問題は、T の代わりに何を入れたらよいかわからないことです。

4

2 に答える 2

3

たぶん私はあなたを誤解していますが、あなたのすべての DTO が好きなスーパークラスを作ることができませんでしたBaseDTO

次に、次のように使用します。

public class CustomerDTO : BaseDTO {}

IDataForGrid<BaseDTO> aa;

var coll = aa.GetList();

このようにして、coll変数はIGridResponse<BaseDTO>、すべての DTO オブジェクトが拡張される型になります。

意味がある?

于 2010-03-11T10:26:26.657 に答える
3

必要に応じて T を置き換えることができるように、メソッドをジェネリックにすることもできます。

public class Service1
{
  public IGridResponse<T> CreateResponse<T>(IGridRequest request)
  {
    ...
    IDataForGrid<T> aa;

    if(request == 1) cg = new CustomerGridData;
    if(request == 2) og = new OrderGridData;

    var coll = aa.GetList();
  }
}
于 2010-03-11T10:23:29.677 に答える