2013-03-14 162 views
0

我堅持用C#語法問題減少泛型類聲明

我想提取我的代碼一點點,我去類似的東西:

public abstract class DMO<TDao ,TExtender> 
      where TDao : Dao 
      where TExtender : Extender<TDao> 
{ 
    abstract Dictionary<TExtender, PropertyInfo> Properties { get; set; } 
.... 
} 

只是因爲如果我做到這一點

public abstract class DMO<TDao> 
      where TDao : Dao 
{ 
    abstract Dictionary<Extender<TDao>, PropertyInfo> Properties { get; set; } 
.... 
} 

我不能夠使用派生的Extender<TDao>

是否有NY方法,使簡單的(我堅持使用.NET 3.5,所以我覺得我不能使用該協)

感謝

+1

我不完全確定你要在這裏實現什麼。也許對你想要解決的問題有一些闡述? – rossipedia 2013-03-14 02:55:34

+0

問題是關於降低類的複雜性,通過減少通用參數的數量,我有一些問題,理解爲什麼我需要TExender在這裏,考慮到比Textender只是一個擴展器,但經過一些esearch它可能只是一個框架限制,可以通過解決使用協變泛型(但只適用於.net 4.0) – guillaume 2013-03-14 03:16:12

+0

您確定您不能在字典中使用Extender 的派生類嗎?我認爲你的第二個案例足夠好,應該運行良好 – Fendy 2013-03-14 03:29:52

回答

0

只是

public abstract class DMO<T> where T: Extender<Dao> { 
    public abstract Dictionary<T, PropertyInfo> Properties { 
     get; 
     set; 
    } 
    // ... 
} 

注意virtualabstract成員不能是私人的。

+0

好,但我不知道它的工作原因道是一個抽象類,我需要擴展器使用像擴展器 guillaume 2013-03-14 13:41:06

+0

當然,你可以使用任何泛型類像'擴展',因爲'DaoDerived'會派生從'Dao'按照你的意圖。 – 2013-03-14 18:23:40