Читаем Язык программирования C#9 и платформа .NET5 полностью

Хотя низкоуровневые детали языка CIL пока подробно не рассматривались, обратите внимание на многочисленные вызовы кода операции ldstr ("load string" — "загрузить строку"). Попросту говоря, код операции ldstr языка CIL загружает новый объект string в управляемую кучу. Предыдущий объект string, который содержал значение "Му other string", будет со временем удален сборщиком мусора.

Так что же в точности из всего этого следует? Выражаясь кратко, класс string может стать неэффективным и при неправильном употреблении приводить к "разбуханию" кода, особенно при выполнении конкатенации строк или при работе с большими объемами текстовых данных. Но если необходимо представлять элементарные символьные данные, такие как номер карточки социального страхования, имя и фамилия или простые фрагменты текста, используемые внутри приложения, тогда тип string будет идеальным вариантом.

Однако когда строится приложение, в котором текстовые данные будут часто изменяться (подобное текстовому процессору), то представление обрабатываемых текстовых данных с применением объектов string будет неудачным решением, т.к. оно практически наверняка (и часто косвенно) приведет к созданию излишних копий строковых данных. Тогда каким образом должен поступить программист? Ответ на этот вопрос вы найдете ниже.

<p id="AutBody_Root111">Использование типа System.Text.StringBuilder</p>

С учетом того, что тип string может оказаться неэффективным при необдуманном использовании, библиотеки базовых классов .NET Core предоставляют пространство имен System.Text. Внутри этого (относительно небольшого) пространства имен находится класс StringBuilder. Как и System.String, класс StringBuilder определяет методы, которые позволяют, например, заменять или форматировать сегменты. Для применения класса StringBuilder в файлах кода C# первым делом понадобится импортировать следующее пространство имен в файл кода (что в случае нового проекта Visual Studio уже должно быть сделано):

// Здесь определен класс StringBuilder:

using System.Text;

Уникальность класса StringBuilder в том, что при вызове его членов производится прямое изменение внутренних символьных данных объекта (делая его более эффективным) без получения копии данных в модифицированном формате. При создании экземпляра StringBuilder начальные значения объекта могут быть заданы через один из множества конструкторов. Если вы не знакомы с понятием конструктора, тогда пока достаточно знать только то, что конструкторы позволяют создавать объект с начальным состоянием при использовании ключевого слова new. Взгляните на следующий пример применения StringBuilder:

static void FunWithStringBuilder

{

  Console.WriteLine("=> Using the StringBuilder:");

  StringBuilder sb = new StringBuilder("**** Fantastic Games ****");

  sb.Append("\n");

  sb.AppendLine("Half Life");

  sb.AppendLine("Morrowind");

  sb.AppendLine("Deus Ex" + "2");

  sb.AppendLine("System Shock");

  Console.WriteLine(sb.ToString);

  sb.Replace("2", " Invisible War");

  Console.WriteLine(sb.ToString);

  Console.WriteLine("sb has {0} chars.", sb.Length);

  Console.WriteLine;

}

Здесь создается объект StringBuilder с начальным значением "**** Fantastic Games ****". Как видите, можно добавлять строки в конец внутреннего буфера, а также заменять или удалять любые символы. По умолчанию StringBuilder способен хранить строку только длиной 16 символов или меньше (но при необходимости будет автоматически расширяться): однако стандартное начальное значение длины можно изменить посредством дополнительного аргумента конструктора:

// Создать экземпляр StringBuilder с исходным размером в 256 символов.

StringBuilder sb = new StringBuilder("**** Fantastic Games ****", 256);

При добавлении большего количества символов, чем в указанном лимите, объект StringBuilder скопирует свои данные в новый экземпляр и увеличит размер буфера на заданный лимит.

<p id="AutBody_Root112">Сужающие и расширяющие преобразования типов данных</p>
Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT