C# 通用接口问题

C# 通用接口问题,c#,.net,interface,application-design,C#,.net,Interface,Application Design,我希望所有与网格相关的任务都有一个接口。这些任务实现此接口: public interface IDataForGrid<T> { IGridResponse<T> GetList(IGridRequest request); } 公共接口IDataForGrid { IGridResponse GetList(IGridRequest-request); } T类型始终是DTO类。我无法为此DTO创建公共接口,因为它们没有任何公共接口。只有一个具有特定属性的

我希望所有与网格相关的任务都有一个接口。这些任务实现此接口:

public interface IDataForGrid<T>
{
    IGridResponse<T> GetList(IGridRequest request);
}
公共接口IDataForGrid
{
IGridResponse 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>
{
   ...
}
公共类服务1
{
公共IGridResponse CreateResponse(IGridRequest请求)
{
...
伊达塔格里亚;
如果(请求==1)aa=new CustomerGridData;
if(request==2)aa=newordergriddata;
var coll=aa.GetList();
}
}
公共类CustomerGridData:IDataForGrid
{
...
}

问题是我不知道用什么来代替t。

您也可以将该方法设置为通用方法,以便根据需要替换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();
  }
}
公共类服务1
{
公共IGridResponse CreateResponse(IGridRequest请求)
{
...
伊达塔格里亚;
如果(请求==1)cg=新CustomerGridData;
if(request==2)og=newordergriddata;
var coll=aa.GetList();
}
}

您也可以将该方法设置为通用方法,以便根据需要替换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();
  }
}
公共类服务1
{
公共IGridResponse CreateResponse(IGridRequest请求)
{
...
伊达塔格里亚;
如果(请求==1)cg=新CustomerGridData;
if(request==2)og=newordergriddata;
var coll=aa.GetList();
}
}

也许我不理解你,但是你不能制作一个超级类,让你所有的DTO都像
BaseDTO

然后像这样使用它:

public class CustomerDTO : BaseDTO {}

IDataForGrid<BaseDTO> aa;

var coll = aa.GetList();
公共类CustomerDTO:BaseDTO{}
伊达塔格里亚;
var coll=aa.GetList();
这样,您的
coll
变量将是
IGridResponse
类型,所有数据对象都从该类型扩展而来


有道理吗?

也许我不理解你,但是你能不能制作一个超级类,让你所有的DTO都像
BaseDTO

然后像这样使用它:

public class CustomerDTO : BaseDTO {}

IDataForGrid<BaseDTO> aa;

var coll = aa.GetList();
公共类CustomerDTO:BaseDTO{}
伊达塔格里亚;
var coll=aa.GetList();
这样,您的
coll
变量将是
IGridResponse
类型,所有数据对象都从该类型扩展而来


有道理吗?

是的,你很明白。但是在基类中放什么呢?DTO没有什么共同点。从技术上讲,基类中不需要任何东西,尽管基类中没有任何东西会让人觉得奇怪。但是,如果这是在代码的其他更详细的领域取得进展的成本,那么就这样吧。很有可能在将来,你的DTO最终会有一些共同点,他们通常都会:)你在施展时不会得到施展特例吗?IDataForGrid aa=新CustomerDataGrid();是的,你很明白。但是在基类中放什么呢?DTO没有什么共同点。从技术上讲,基类中不需要任何东西,尽管基类中没有任何东西会让人觉得奇怪。但是,如果这是在代码的其他更详细的领域取得进展的成本,那么就这样吧。很有可能在将来,你的DTO最终会有一些共同点,他们通常都会:)你在施展时不会得到施展特例吗?IDataForGrid aa=新CustomerDataGrid();我的帖子中有一个错误,现在已经修复了。你打算用
coll
做什么?这里问的后续问题我的帖子中有一个错误,现在已经修复了。你打算用
coll
做什么?这里问的后续问题