班级&功能选择性泛型

时间:2012-10-18 08:55:13

标签: c# .net wpf generics

我有一个名为IFilterDataSourceAdapter的界面。此界面公开EndPoints以适应传入的数据源(IEnumrable<T>iCollectionViewDataTableDataViewXmlDocument),并提供直观过滤它们的功能。

  1. 它接受数据源中字段的名称。
  2. 生成FilterFields每个公开三个属性的列表

    1. 字段名称
    2. 根据字段的Type筛选运算符列表 - 等于,包含,小于等。
    3. 提供的值字段。
    4. GUI可以使用此FilterField列表来显示过滤器面板。

    5. 适配器将提供自己的ICommand以从GUI执行过滤器调用。
    6. 所以在你的适配器中,我想做以下

      1. 如果传入的数据源属于IEnumrable<SomeClass>类型,我会在应用过滤器时生成AsQueryable() Linq表达式并公开查询IEnumrable<SomeClass> < / strong>列表回来。
      2. 如果传入的数据源类型为ICollectionView,我将生成Filter委托并刷新集合视图。
      3. 如果传入的数据源类型为DataTableDataView,我将生成DataFilter基于字符串的查询并刷新数据表或数据视图。
      4. 如果传入的数据源类型为XDocument,则会生成XPath个表达式,并且XElements列表已过滤。
      5. 我希望基于Generics约束上述类型的数据源来执行此操作,并相应地区分Filter命令执行。

        我们是否可以根据T为IFilterDataSourceAdapter<T>IEnurable<SomeClass>ICollectionView或{{}为其成员(字段和函数)约束单个接口DataTable 1}}或DataView

        修改

        我目前的实现实际上是每种类型数据源的5种asbtract适配器,它们工作正常。它们都实现了XDocument。但我认为可能我们可以使IFilterDataSourceAdapter具有约束,而不是更适合每个适配器实现设计。所以我可能已经很好了。

        可能是我在讨厌事情!!!

1 个答案:

答案 0 :(得分:1)

可能不是答案,但评论时间太长......根据我对您的问题的理解,我会说你现在拥有的(具有不同接口的公共基本接口,每个接口都是特定于数据源)都可以。

我指的是你问题的这一部分:

  

我们可以使用单个接口IFilterDataSourceAdapter<T>吗?   基于T约束其成员(字段和函数)   是IEnurable<SomeClass>ICollectionViewDataTable或   DataViewXDocument

如果你的“通用”接口应该根据其通用参数T的类型指定不同的实现,那么接口实际上不是通用的,是吗?

使用泛型,你应该抽象出不同类型共有的行为,而约束应该只允许你更精确地定义你为这种常见行为定义的不同类型的集合。