学习.NET泛型的最佳资源?

时间:2008-09-17 16:40:05

标签: c# .net generics

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

8 个答案:

答案 0 :(得分:10)

显而易见的选择..

MSDN C# Generics

答案 1 :(得分:6)

答案 2 :(得分:5)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

“果壳中的C#3.0”是一本很棒的参考书,其中有很多例子可以帮助你理解这个概念而不会感到臃肿。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

最好按照Microsoft的一些主题进行培训。如果您正在寻找书籍,以下是理想的:

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

答案 7 :(得分:-4)

我的投票主要是你可以避免它们:)

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

如果演员如此惹恼你,也许是时候考虑像IronPython这样的动态语言了:)

而且 - 如果你真的遇到一个场景,你认为通用是有意义的,把它作为另一个问题发布,这里的大脑可以一起看,并逐案解决:)

更新:是的,编译器检查很好,但是检查Castle Project的源代码,你可以看到许多情况,其中泛型类型会因为你无法进行铸造而使得像IBusinessObject这样的东西比BusinessObject-更灵活 - 因为您无法将从BusinessObject继承的东西转换回BusinessObject并期望访问继承的函数。通常我看到代码最终为BusinessObjectBase - > BusinessObject - >您的实际课程。这就是为什么我觉得使用泛型并不总是有益的 - 而且我是那些滥用这种实现的人之一,并且最终通过泛型打字获得了大量有趣的功能,并不是很好。

更新#2:Boxing / Unboxing只是意味着当您使用抽象类型(如对象)来存储值并使用强类型值再次存储(需要转换)时,需要转换对象,不多除了我所说的收集情况,我可以看到差异。和这样的代码仍然装拳:

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