2010-03-11 63 views
1

我想有一個接口爲我所有的格tasks.The任務實現此接口相關:通用接口問題

public interface IDataForGrid<T> 
{ 
    IGridResponse<T> GetList(IGridRequest request); 
} 

的T類始終是一個DTO類。我不能爲這個DTO創建一個通用接口,因爲它們沒有共同之處。只是一個具有特殊屬性的啞DTO。

我想用這樣的:

public class Service1 
{ 
    public IGridResponse CreateResponse(IGridRequest request) 
    { 

     ... 
     IDataForGrid<T> aa; 

     if(request == 1) aa = new CustomerGridData; 
     if(request == 2) aa = new OrderGridData; 

     var coll = aa.GetList(); 
    } 
} 

public class CustomerGridData : IDataForGrid<CustomerDTO> 
{ 
    ... 
} 

的問題是我不知道該用什麼來代替T.

+1

不要讓你的問題。 – Benny 2010-03-11 10:23:33

+0

我的帖子中有錯誤,現在已修復 – user137348 2010-03-11 10:48:21

+0

你打算怎麼處理'coll'? – AakashM 2010-03-11 10:58:52

回答

3

也許我錯過認識你,但想不出你犯了一個超類,所有DTO的像BaseDTO

然後使用它像這樣:

public class CustomerDTO : BaseDTO {} 

IDataForGrid<BaseDTO> aa; 

var coll = aa.GetList(); 

這樣,你的coll變量將是IGridResponse<BaseDTO>類型的所有DTO對象的距離延伸。

這有道理嗎?

+0

是的,你理解得很好。但是,在基類中放什麼? DTO沒有共同之處。 – user137348 2010-03-11 10:32:54

+0

你在技術上不需要基類中的任何東西,雖然沒有任何東西在那裏感覺很奇怪。但是,如果這就是在代碼的其他更詳細的領域獲得成功的方法,那麼就這樣做吧。很有可能在將來你的DTO最終會擁有共同的東西,他們通常會這樣做:) – Mark 2010-03-11 10:35:30

+0

在施放時你會不會獲得施放異常? IDataForGrid aa = new CustomerDataGrid(); – Hath 2010-03-11 11:07:39

3

可以使該方法一般也如此如要求T可以取代:

public class Service1 
{ 
    public IGridResponse<T> CreateResponse<T>(IGridRequest request) 
    { 
    ... 
    IDataForGrid<T> aa; 

    if(request == 1) cg = new CustomerGridData; 
    if(request == 2) og = new OrderGridData; 

    var coll = aa.GetList(); 
    } 
} 
+0

但T類型將在IF語句中確認.. – user137348 2010-03-11 10:28:47

+0

There在我的文章中是錯誤的,請現在看看 – user137348 2010-03-11 10:45:27