为非泛型类设置所有泛型方法的T.

时间:2013-09-14 20:17:28

标签: c# generics

我们假设我有一个像

这样的课程
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 ......或者这完全不可能?

1 个答案:

答案 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)