学习.NET泛型的最佳资源?
我在工作中从未使用过任何.NET泛型,但我知道它们非常流行。有没有人有任何好的链接或者预订学习建议?作为奖励;我只是隐约地了解什么是.NET通用集合以及它们的作用...没有人有任何实际的示例说明如何比.NET的常规集合更好地利用它们吗?
解决方案
回答
显而易见的选择
MSDN CGenerics
回答
通过Cby Jeffrey Richter编写的CLR深入探讨了泛型,它是每个.NET开发人员应拥有和阅读的无价资源之一。
回答
如果我们曾经使用过C ++模板,那么.Net泛型几乎是同一件事。他们甚至使用类似的<T>语法。
即使我们不了解任何C ++,也可能会使此操作变得比我们需要的难,尤其是在集合方面。它们与任何其他集合一样,但是在创建它们时,我们在<<>内提供了一个类型名称,以便编译器知道它们所持有的项目类型。
回答
简而言之,C3.0是一本很棒的参考书,其中的示例足够大,足以使我们理解该概念而不会感到肿。
回答
我的投票多数是我们可以避免它们:)
泛型的主要优点是节省了转换,如果最终在内部进行转换没有任何意义。如果我们尝试研究此问题,我们会发现大多数泛型候选对象实际上就是那些可以在内部创建本机存储以获取此类好处的集合/集合。另一方面,与接口继承实现相比,大多数其他组件几乎没有/没有获得性能,并且极大地降低了灵活性。
如果太多让我们感到烦恼的话,也许是时候让我们考虑使用IronPython之类的动态语言了:)
如果确实遇到了我们认为通用的情况,请将其发布为另一个问题,这里的大脑可以一起看待并逐案解决:)
更新:是的编译器检查很好,但是检查Castle Project的源代码,我们会看到很多情况下泛型类型陷入困境,因为我们无法进行铸造,例如IBusinessObject比BusinessObject灵活得多,因为我们无法进行转换从BusinessObject继承回BusinessObject,并期望访问继承的函数。通常,我看到代码最终以BusinessObjectBase-> BusinessObject->实际类结尾。这就是为什么我觉得使用泛型并不总是很有利的原因,而我是滥用此类实现并最终拥有大量带有泛型类型的有趣功能的人之一,一点也不好。
更新#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_GenericsRevisiting_Boxing_and_Unboxing
回答
- http://www.informit.com/articles/article.aspx?p=605369
- http://www.codeproject.com/KB/cs/genericcache.aspx
回答
我发现WROX的Professional .NET 2.0泛型非常有用,因为它包含许多真实的示例。泛型可能会使初学者感到困惑,但对于有经验的开发人员而言,泛型可能是一个非常有用/功能强大/省时的工具。就个人而言,我发现.NET泛型对简化集合的定义和使用最有用。同样,使用泛型可能会导致代码效率更高,因为它可以最大程度地减少通常与装箱/拆箱类型转换相关的性能影响。
回答
最好遵循有关此主题的一些Microsoft培训。如果我们正在寻找书籍,那么以下将是理想的选择:
http://www.microsoft.com/MSPress/books/9469.aspx