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
做什么?这里问的后续问题