System.String如何保存其字符串

时间:2013-04-29 06:22:08

标签: c# .net programming-languages language-implementation

为了在.NET上变得更好,我发现查看.Net-Framework本身以及Microsoft如何实现所有好东西是有帮助的。我最后一次使用我的反编译器来查看System.String-Class的实现,以研究String-Object如何存储其实际字符串。我对自己中最大的课程感到惊讶,我无法清楚地确定实际字符串保存的课程的哪一部分。

以下是反编译的两个屏幕截图,其中显示了该类的开始和结束部分: enter image description here enter image description here

我认为[System.Reflection.DefaultMember("Chars")](第一个屏幕截图中的第一行)和/或属性public extern char this[int index](第二个屏幕截图的中间)是我要查找的内容。

这是正确的,如果是,它是如何工作的?

1 个答案:

答案 0 :(得分:4)

System.String非常特殊类型。除了不同实例可以具有不同大小的数组之外,它是.NET中唯一的类型。 (其他任何&#34;出现&#34;具有不同大小,如List<T>通常取决于数组,或某些递归类型,如LinkedList节点。对象本身具有固定大小。)字符数据内嵌在对象本身内,以及字符串的长度。它不像String包含对char[]或类似内容的引用。

CLR对System.String有非常深入的了解,其中很多都是在本机代码中实现的。基本上,我建议反对试图理解此时的实施 - 它可能更有说服力而不是有用。

Chars成员(C#中的索引器)仅从字符串中提取单个字符。您可以按照这一点来了解有关数据存储位置的更多信息,但它本身并不执行实际存储。