为非泛型类上的所有泛型方法设置 T
本文关键字:泛型方法 设置 泛型类 | 更新日期: 2023-09-27 18:31:29
假设我有一个类似
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...还是这完全不可能?
是的,可以使用聪明的代理:
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)
.