为了在.NET上变得更好,我发现查看.Net-Framework本身以及Microsoft如何实现所有好东西是有帮助的。我最后一次使用我的反编译器来查看System.String-Class
的实现,以研究String-Object如何存储其实际字符串。我对自己中最大的课程感到惊讶,我无法清楚地确定实际字符串保存的课程的哪一部分。
以下是反编译的两个屏幕截图,其中显示了该类的开始和结束部分:
我认为[System.Reflection.DefaultMember("Chars")]
(第一个屏幕截图中的第一行)和/或属性public extern char this[int index]
(第二个屏幕截图的中间)是我要查找的内容。
这是正确的,如果是,它是如何工作的?
答案 0 :(得分:4)
System.String
是非常特殊类型。除了不同实例可以具有不同大小的数组之外,它是.NET中唯一的类型。 (其他任何&#34;出现&#34;具有不同大小,如List<T>
通常取决于数组,或某些递归类型,如LinkedList
节点。对象本身具有固定大小。)字符数据内嵌在对象本身内,以及字符串的长度。它不像String
包含对char[]
或类似内容的引用。
CLR对System.String
有非常深入的了解,其中很多都是在本机代码中实现的。基本上,我建议反对试图理解此时的实施 - 它可能更有说服力而不是有用。
Chars
成员(C#中的索引器)仅从字符串中提取单个字符。您可以按照这一点来了解有关数据存储位置的更多信息,但它本身并不执行实际存储。