тип System.String
Один из самых полезных типов, встречающихся в любом приложении —
System.
String
, — представляет неизменяемый упорядоченный набор символов. Будучи
прямым потомком
Object
, он является ссылочным типом, по этой причине стро-
ки всегда размещаются в куче и никогда — в стеке потока. Тип
String
реализует
также несколько интерфейсов (
IComparable/IComparable
,
ICloneable
,
IConvertible
,
IEnumerable
/
IEnumerable
и
IEquatable
).
создание строк
Во многих языках (включая C#)
String
относится к примитивным типам, то есть
компилятор разрешает вставлять литеральные строки непосредственно в исходный
код. Компилятор помещает эти литеральные строки в метаданные модуля, откуда
они загружаются и используются во время выполнения.
В C# оператор
new
не может использоваться для создания объектов
String
из
литеральных строк:
using System;
public static class Program {
public static void Main() {
продолжение
360
Глава.14 .Символы,.строки.и.обработка.текста
String s = new String("Hi there."); // Ошибка
Console.WriteLine(s);
}
}
Вместо этого используется более простой синтаксис:
using System;
public static class Program {
public static void Main() {
String s = "Hi there.";
Console.WriteLine(s);
}
}
Результат компиляции этого кода можно посмотреть с помощью утилиты
ILDasm exe
:
.method public hidebysig static void Main() cil managed
{
.entrypoint
// Code size 13 (0xd)
.maxstack 1
.locals init (string V_0)
IL_0000: ldstr "Hi there."
IL_0005: stloc.0
IL_0006: ldloc.0
IL_0007: call void [mscorlib]System.Console::WriteLine(string)
IL_000c: ret
} // end of method Program::Main
За создание нового экземпляра объекта отвечает IL-команда
newobj
. Однако
здесь этой команды нет. Вместо нее вы видите специальную IL-команду
ldstr
(загрузка строки), которая создает объект
String
на основе литеральной строки,
полученной из метаданных. Отсюда следует, что объекты
String
в CLR создаются
по специальной схеме.
Используя небезопасный код, можно создать объект
String
с помощью
Char*
и
SByte*
. Для этого следует применить оператор
new
и вызвать один из конструк-
торов типа
String
, получающих параметры
Char*
и
SByte*
. Эти конструкторы
создают объект
String
и заполняют его строкой, состоящей из указанного массива
экземпляров
Char
или байтов со знаком. У других конструкторов нет параметров-
указателей, их можно вызвать из любого языка, создающего управляемый код.
В C# имеется специальный синтаксис для включения литеральных строк в ис-
ходный код. Для вставки специальных символов, таких как конец строки, возврат
каретки, забой, в C# используются управляющие последовательности, знакомые
разработчикам на C/C++:
// String содержит символы конца строки и перевода каретки
String s = "Hi\r\nthere.";
Do'stlaringiz bilan baham: |