13

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

4

8 回答 8

11

显而易见的选择..

MSDN C# 泛型

于 2008-09-17T16:41:17.203 回答
5

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

于 2008-09-17T16:44:17.353 回答
1

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

即使你不懂任何 C++,你也可能比你需要的更难,尤其是在集合方面。它们就像任何其他集合一样,但是当您创建它们时,您在 <<> 中提供了一个类型名称,以便编译器知道它们持有什么样的项目。

于 2008-09-17T16:44:22.890 回答
0

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

于 2008-09-17T16:50:33.670 回答
0

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

于 2008-09-17T17:02:10.210 回答
0

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

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

于 2008-09-17T18:43:53.400 回答
-4

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

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

如果投射让你非常恼火,也许是时候考虑像 IronPython 这样的动态语言了 :)

而且-如果您真的遇到您认为通用的情况,请将其作为另一个问题发布,这里的大脑可以一起查看并逐案解决:)

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

更新#2:装箱/拆箱仅意味着当您使用抽象类型(如对象)来存储值并使用强类型值再次将其存储回来(这需要强制转换)时,需要强制转换对象,我可以没有太大区别除了我所说的收集情况外,请参阅。像这样的 AND 代码仍然可以装箱:

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

于 2008-09-17T16:50:38.943 回答