【问题标题】:What is a great resource for learning about the implementation details of .NET generic collections?什么是学习 .NET 泛型集合的实现细节的好资源?
【发布时间】:2010-04-27 17:18:03
【问题描述】:

我有兴趣了解 .NET 中泛型集合的底层实现细节。我想到的是诸如如何存储集合、CLR 如何访问集合的每个成员等细节。

对于类似于传统数据结构的集合,例如LinkedList和Dictionary,我想我对下面发生的事情有所了解。但是,我对 List (如何设置以使其既可索引又可扩展?)和 SortedList 之类的集合并不确定,因此任何关于我可以查找以了解更多有关它们的信息的线索将不胜感激。

【问题讨论】:

    标签: .net


    【解决方案1】:

    看看反射器。使用它,您可以打开 BCL 中的任何类并查看其内部结构以及它是如何实现的。学习代码的好方法。

    否则,您可以在“选项调试”对话框中将 Visual Studio 设置为单步执行 .net 代码,并在调试时单步执行任何集合。

    【讨论】:

    • 同意。 Reflector 是我用 C# 编程时最有用的工具之一。
    【解决方案2】:

    开始查看实现细节的一个好方法是打开Reflector 并反编译原始源代码。您可以将源代码反编译为 C# 或 VB,还可以分析代码中的依赖关系。一个缺点是 Reflector 不能从优化的代码和枚举器(这是集合实现的重要部分)生成易于阅读的代码。

    Microsoft 还发布了原始源代码,其中还提供了所有原始 cmets 和清晰的变量名称。请参阅here 如何启用它。您需要编写一个小型演示程序以使 Visual Studio 下载正确的源代码,但随后它们将被缓存在某个文件夹中,以便您可以在调试器之外轻松访问它们。另一种选择是使用一些工具来下载完整的源代码。我想也有一个 MSDN 下载和源代码。

    您可能想了解的另一件事是泛型实际上是如何工作的。它们是构建集合的基础。与 Java 相比,.NET 实现更优越,因为它允许值类型的集合而不会影响性能。我已经就这个话题写了blog post,所以你可能想看看或者直接阅读official Microsoft Paper

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多