2013-04-29 4 views
0

Чтобы стать лучше в .NET, я нашел полезным изучить в .Net-Framework и как Microsoft реализует все приятные вещи. В последний раз я использовал мой декомпилятор, чтобы посмотреть на реализацию System.String-Class, чтобы исследовать, как String-Object сохраняет свою фактическую строку. Я был удивлен самым большим классом в себе и что я не могу четко определить, какую часть класса сохраняет фактическая строка.Как System.String сохраняет свою строку

Вот два скриншот декомпиляции, который показывает начало и конец части класса: enter image description here enter image description here

Я полагаю, что [System.Reflection.DefaultMember("Chars")] (первая линия в первом скриншоте) и/или имущества public extern char this[int index] (середина второго скриншота) того, что я ищу.

Правильно ли это, и да, как это работает?

+0

Было бы полезно для дальнейших вопросов, если бы upvoter и downvoter оставили комментарий. Благодарю. – Micha

ответ

4

System.Stringочень специальный тип. Это единственный тип в .NET, отличный от массивов, где разные экземпляры могут иметь разные размеры. (Все, что «появляется» для разных размеров, таких как List<T>, обычно зависит от массива или от какого-то рекурсивного типа, например, от узла LinkedList. Объекты имеют фиксированный размер.) Символьные данные являются встроенными внутри самого объекта, вдоль с длиной строки. Это не похоже на String содержит ссылку на char[] или аналогичный.

CLR имеет очень глубокое знание System.String, и многие из них реализованы в собственном коде. В принципе, я бы порекомендовал против, пытаясь понять реализацию на этом этапе - скорее всего, это будет более запутанным, чем полезным.

Chars член (только указатель в C#) выборки один символ из строки. Вы можете следить за этим, чтобы узнать больше о том, где хранятся данные, но он не выполняет собственно хранилище.

+0

Хотя я согласен, это звучит скорее как комментарий, чем ответ на меня –

+0

@ErnodeWeerd: Я добавил немного более конкретную информацию о том, где живут реальные данные. –

+0

Я думаю, будет полезно добавить также ссылку на главу книги Джона «C# in Depth»: [Строки в C# и .NET] (http://csharpindepth.com/Articles/General/Strings.aspx) – outcoldman

Смежные вопросы