Обзор String

Экземпляры String являются неизменяемыми в том смысле, что, однажды создав их, вы не можете их изменять. Хотя поначалу это может показаться неэффективным, такой подход на самом деле повышает эффективность кода.

Вызов на строке метода ICloneable.Clone приводит к получению экземпляра, указывающего на те же строковые данные, что и источник. На самом деле ICloneable.Clone просто возвращает ссылку на this.

Это совершенно безопасно, потому что общедоступный интерфейс String не предоставляет никакой возможности модифицировать действительные данные String.

Конечно, можно обмануть систему, применив небезопасный код, но имеет смысл так поступать. Фактически, если нужна строка, представляющая собой глубокую копию исходной строки, то для ее получения можно вызвать метод Сору.

Те, кто знаком с общими шаблонами и идиомами проектирования, могут распознать здесь идиому “handle/body” (дескриптор/тело) или “envelope/letter” (конверт/письмо). В С++ эта идиома обычно реализуется при проектировании типов, основанных на ссылках, которые можно передавать по значению.

Многие реализации стандартной библиотеки С++ реализуют стандартные строки именно таким образом. Однако благодаря управляемой сборщиком мусора куче С#, не нужно беспокоиться о поддержке счетчика ссылок на лежащие в основе данные.

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

Обычно процедуры манипуляции со строками не являются частью языка, но частью библиотеки, используемой вместе с языком. Хотя это почти верно и для С#, ситуацию немного затеняет исполняющая система .NET.

Проектировщики спецификации CLI могли бы представить строки в виде простых массивов типа System.Char, но они предпочли вместо этого включить в коллекцию встроенных типов System.String.

Фактически System.String стоит особняком в коллекции встроенных типов, поскольку является типом ссылочным, а большинство встроенных типов — типы значений. Однако это отличие нивелируется тем фактом, что тип String ведет себя в соответствие с семантикой значений.

Возможно, вы уже знаете, что тип System.String представляет строку символов Unicode, a System.Char — 16-битный символ Unicode. Конечно, это облегчает локализацию и переносимость на другие операционные системы.

Однако иногда может понадобиться интерфейс с внешними системами, в которых используется кодирование строк, отличное от Unicode. Для таких случаев можно применить класс System. Text. Encoding, который позволяет преобразовать строки между разными системами кодирования, включая ASCII, UTF-7, UTF-8 и UTF-32.

Кстати, исполняющая система использует внутри себя для представления Unicode формат UTF-16.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100