2008-09-17 100 views
13

我从未在我的作品中使用过任何.NET泛型,但我明白它们相当受欢迎。有没有人有任何好的链接或书籍的建议,学习它们?作为奖励;我只是模糊地理解.NET泛型集合是什么以及它们做什么......有没有人有任何实例可以比.NET中的常规集合更好地利用它们?学习.NET泛型的最佳资源?

回答

5

CLR进入约仿制药的深度,是无价的资源,每一个.NET开发人员应该拥有和阅读的一个。

1

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

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

0

简介C#3.0是一本非常棒的参考书,其中的示例只需足够大的范例即可掌握概念,不会感到臃肿。

-4

我的投票是 - 大多是你可以避开他们:)

主要优点为仿制药是节省铸造,如果你最终做内部铸造,它没有任何意义。如果你试图研究这个问题,你会发现大多数泛型的候选人实际上是那些可以在内部创建本地存储以获得此益处的集合/集合。另一方面,大多数其他组件的性能几乎没有,并且与接口继承实施相比显着降低了灵活性。

如果铸造惹恼了你这么多,也许时间让你考虑动态语言如IronPython的:)

和 - 如果你真的遇到一个情况下,你觉得一般意义,它张贴出来的另一个问题,大脑在这里可以一起看,并按情况解决它:)

更新:是的,编译器检查很好,但检查城堡项目的来源,你可以看到很多情况下,泛型类型进入方式,因为你不能做铸造 - 像IBusinessObject这样的东西比BusinessObject更灵活 - 因为你不能将继承自BusinessObject的东西转换回BusinessObject并期望访问一个函数n继承。通常我看到代码最终为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_Generics—Revisiting_Boxing_and_Unboxing

+1

你可以做的不仅仅是集合了很多。你一定没有听说过“拳击”。除了表演之外,还有更多要避免投射。编译器强制执行的类型安全性非常好。 – 2008-09-17 17:12:36

0

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