我在工作中从未使用过任何 .NET 泛型,但我知道它们相当流行。有没有人有任何好的链接或书籍建议来学习它们?作为奖励;我只是模糊地了解 .NET 通用集合是什么以及它们的作用...是否有人有任何实际示例来说明如何使用它们比 .NET 中的普通集合具有更大的优势?

其他提示

显而易见的选择..

MSDN C# 泛型

Jeffrey Richter 所著的 CLR via C# 深入探讨了泛型,是每个 .NET 开发人员都应该拥有和阅读的无价资源之一。

如果您曾经使用过 C++ 模板,那么 .Net 泛型几乎是一样的东西。他们甚至使用类似的 <T> 语法。

即使您不懂 C++,您也可能会让这件事变得比您需要的更难,尤其是在集合方面。它们就像任何其他集合一样,但是当您创建它们时,您在 <<> 中提供类型名称,以便编译器知道它们保存的项目类型。

《C# 3.0 in a Nutshell》是一本很棒的参考书,其中的示例足以让您掌握概念,而不会感到臃肿。

我发现 WROX 的 Professional .NET 2.0 Generics 非常有用,因为它包含大量现实世界的示例。泛型可能会让初学者感到困惑,但对于经验丰富的开发人员来说,它们可能是非常有用/强大/节省时间的工具。就我个人而言,我发现 .NET 泛型在简化集合的定义和使用方面最有用。此外,使用泛型可以产生更高效的代码,因为它可以最大限度地减少通常与装箱/拆箱类型转换相关的性能损失。

最好遵循一些有关该主题的 Microsoft 培训。如果您正在寻找书籍,以下内容将是理想的选择:

http://www.microsoft.com/MSPress/books/9469.aspx

我的投票是——大多数情况下你可以避免它们:)

泛型的主要优点是节省转换,如果您最终在内部进行转换则没有任何意义。如果您尝试研究这个问题,您会发现大多数泛型的候选者实际上是那些可以在内部创建本机存储以获得此类好处的集合/集。另一方面,与接口继承实现相比,大多数其他组件几乎没有获得性能,并且显着降低了灵活性。

如果转换让您如此烦恼,也许您该考虑像 IronPython 这样的动态语言了:)

而且-如果你确实遇到了一个你认为通用的场景,请将其作为另一个问题发布,这里的大脑可以一起查看并逐个解决它:)

更新:是的,编译器检查很好,但是检查 Castle Project 的源代码,您可以看到很多情况下泛型类型会妨碍您,因为您无法进行转换 - 使 IBusinessObject 之类的东西比 BusinessObject 灵活得多 - 因为您不能将从 BusinessObject 继承的内容强制转换回 BusinessObject,并期望访问继承的函数。通常我看到代码最终为 BusinessObjectBase -> BusinessObject ->Your real class。这就是为什么我觉得使用泛型并不总是有益的——而且我是那些滥用这种实现并最终得到大量带有泛型类型的有趣函数的人之一,一点也不好。

更新#2:装箱/拆箱只是意味着当您使用抽象类型(如对象)存储值并使用强类型值再次存储它(这需要转换)时需要强制转换对象,除了收集情况我说了。像这样的代码仍然进行拳击:

public T GetValue<T>() {
  return (T) ...;
}

这是我最常看到的一般滥用行为。人们认为他们在这里处理的是本机类型,但事实上并非如此。相反,他们只是将其转换为通用语法。真正有意义的是:

public class MyList<T>
{
  private List<T> _list;
...
public T GetValue(int index)
{
  return _list[index];
}

然后又回到我们的收藏存储。这就是为什么我说在集合存储之后我看不到很多通用帮助的机会。本教程参考:http://en.csharp-online.net/Understanding_Generics—Revisiting_Boxing_and_Unboxing

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top