我们假设我有一个像
这样的课程public class DataService
{
public IList<T> All<T>() { ... }
public T Get<T>(int id) { ... }
...
}
我可以用各种方式使用它......
var dataService = new DataService();
var customers = dataService.All<Customer>();
var order = dataService.Get<Order>(1);
...但如果我有一堆具有相同T的操作,这将变得很麻烦。那么有这样的事情会很好:
dataService.TypeIs<Order>();
var order2 = dataService.Get(2);
var order2 = dataService.Get(3);
var allOrders = dataService.All();
TypeIs<T>()
方法怎么样?我认为它必须以某种方式将DataService
转换为DataService<T>
并设置T ......或者这完全不可能?
答案 0 :(得分:2)
是的,可以使用聪明的代理:
public class DataService
{
public IList<T> All<T>() { ... }
public T Get<T>(int id) { ... }
...
}
public class DataServiceProxy<T>
{
public DataServiceProxy(DataService ds)
{
this.ds = ds;
}
public IList<T> All()
{
return this.ds.All<T>();
}
public T Get(int id)
{
return this.ds.Get<T>(id);
}
}
相当于dataService.TypeIs<Order>();
var dataServiceProxy = new DataServiceProxy<Order>(dataService)
。