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>()メソッドはどのように見えるでしょうか?DataServiceどうにかして T に変換して設定する必要があったと思いますDataService<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 に答える