Является ли string.Length в C # (.NET) мгновенной переменной? - PullRequest
7 голосов
/ 05 апреля 2009

Мне интересно, является ли string.Length в C # мгновенной переменной. Под мгновенной переменной я подразумеваю, когда я создаю строку:

string A = "";

A = "Som Boh";

Длина вычисляется сейчас?

ИЛИ

Это вычисляется только после того, как я пытаюсь получить A.Length?

Ответы [ 4 ]

16 голосов
/ 05 апреля 2009

Во-первых, обратите внимание, что строки в .NET сильно отличаются от строк, хранящихся в неуправляемых языках (таких как C ++) ... В CLR длина строки (в символах и в байтах) фактически хранится в памяти так что CLR знает, насколько большой блок памяти (массив символов) содержит строку. Это делается при создании строки и не изменяется при условии неизменности типа System.String.

В C ++ это немного отличается, так как длина строки определяется путем чтения до первого нулевого символа. Из-за того, как в CLR работает использование памяти, вы, по сути, можете считать, что получение свойства Length строки аналогично получению переменной int. Затраты на производительность здесь будут абсолютно минимальными, если вы об этом думаете.

Если вы хотите больше узнать о строках в .NET, попробуйте статью Джона Скита на эту тему - кажется, в ней есть все детали, которые вы когда-либо хотели бы узнать о строках в .NET. 1010 *

10 голосов
/ 05 апреля 2009

Длина строки не вычисляется, она известна во время построения. Поскольку String является неизменным, его вычислять позже не потребуется.

Строка .NET хранится в виде поля, содержащего количество символов и соответствующую последовательность символов Юникода.

3 голосов
/ 05 апреля 2009

.NET строки хранятся с предварительно вычисленной длиной и сохраняются в начале внутренней структуры, поэтому свойство .Length просто выбирает это значение, делая его функцией O (1).

1 голос
/ 05 апреля 2009

Похоже, что это свойство строки, которое, вероятно, установлено в конструкторе. Поскольку это не функция, я сомневаюсь, что она вычисляется при вызове. Они просто получают значение свойства Length.

...