1

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

4

3 回答 3

5

以下是 .NET 库中的一些:

IComparer<T>- 用于比较两个Ts 的接口

IEquatable<T>- 用于判断两个Ts 是否相等的接口

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

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

Action<T>- 用于持有返回 a 的委托T

于 2013-08-12T22:21:41.477 回答
4

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

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

也就是说,有更多机会利用泛型。例如,工厂可以使用泛型来保证类型安全:

class Factory
{
    // can create any type of Widget, will not allow e.g. Create<string>()
    public Widget Create<T>() where T: Widget { ... }
}
于 2013-08-12T22:26:34.630 回答
1

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

  • 数据访问(使用实体框架和Repository<T>模式)
  • 解耦架构(使用 MEF 的GetExport<T>
  • 缓存(使用 MemoryCache)——即使是这个也主要与集合有关。
  • 通用基本 CRUD 合约(通过IService<T>提供基本 CRUD 方法的接口)
  • 图(实体树)迭代和操作。
  • 强类型 INotifyPropertyChanged
  • 通用层,从数据库到 ViewModel。
  • DelegateCommand<T>
  • 事件聚合器/信使
  • 列表的基于表达式的搜索条件
  • 数据模板管理器

而且这个名单会一直持续下去......

底线:

泛型是 C# 的最佳和更普遍的特性之一。

于 2013-08-12T22:26:41.840 回答