0

假设我有一个像

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>()子?我认为它必须以某种方式转换DataServiceDataService<T>并设置 T... 或者这完全不可能?

4

1 回答 1

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).

于 2013-09-14T20:33:44.803 回答