除了集合之外,还用于C#泛型

时间:2013-08-12 21:39:32

标签: c# generics collections

我在MSDN上读到泛型对于创建集合很有用。我对C#很陌生,我想知道是否存在何时将泛型用于集合以外的目的。如果有可能你提供一个例子来说明你的论点。

3 个答案:

答案 0 :(得分:5)

以下是.NET库中的一小部分:

IComparer<T> - 用于比较两个T s

的界面

IEquatable<T> - 用于确定两个T s是否相等的接口

Nullable<T> - 用于为非可空类型提供空值(例如int

Tuple<T1, T2> - 用作包含两个强类型值的快速容器

Action<T> - 用于保存返回T

的委托

答案 1 :(得分:4)

泛型是一项功能,其主要目的是促进代码重用和类型安全,这些概念适用于更广泛的代码段而不仅仅是集合。

很容易看出代码重用和类型安全与集合很容易一起使用:LINQ使用泛型来提供可以对任何类型的可枚举序列(代码重用)进行操作的算法以及各种泛型集合类也使用泛型类型信息来提供类型安全性(例如,尝试将int添加到List<string>的程序甚至无法编译。)

尽管如此,还有很多机会利用仿制药。例如,工厂可以使用泛型来确保类型安全:

class Factory
{
    // can create any type of Widget, will not allow e.g. Create<string>()
    public Widget Create<T>() where T: Widget { ... }
}

答案 2 :(得分:1)

泛型用户的简短列表(来自我自己的Windows应用程序框架):

  • 数据访问(使用实体框架和Repository<T>模式)
  • 解耦架构(使用MEF的GetExport<T>
  • 缓存(使用MemoryCache) - 即使这个也主要与集合相关。
  • 通用基本CRUD合同(通过提供基本CRUD方法的IService<T>接口)
  • 图形(实体树)迭代和操作。
  • Strongly Typed INotifyPropertyChanged
  • 从数据库到ViewModel的全部通用图层。
  • DelegateCommand<T>
  • EventAggregator / Messenger
  • 基于表达式的列表搜索条件
  • DataTemplateManager

这个名单一直在继续......

底线:

泛型是C#中最好的,无处不在的功能之一。