2013-03-14 160 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