为非泛型类上的所有泛型方法设置 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...还是这完全不可能?

为非泛型类上的所有泛型方法设置 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) .