Общая проблема интерфейса - PullRequest
1 голос
/ 11 марта 2010

Я хотел бы иметь один интерфейс для всех моих задач, связанных с сеткой. Задачи реализуют этот интерфейс:

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.

Ответы [ 2 ]

3 голосов
/ 11 марта 2010

Может быть, я вас неправильно понимаю, но разве вы не можете сделать суперкласс, который похож на все ваше DTO BaseDTO

Тогда используйте это так:

public class CustomerDTO : BaseDTO {}

IDataForGrid<BaseDTO> aa;

var coll = aa.GetList();

Таким образом, ваша coll переменная будет иметь тип IGridResponse<BaseDTO>, от которого весь ваш объект DTO расширяется.

Что имеет смысл?

3 голосов
/ 11 марта 2010

Вы также можете сделать метод универсальным, чтобы 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();
  }
}
...