Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
object GetFormat(Type formatType)
где formatType — это объект, получаемый для форматирования.
Интерфейс IFormattable
поддерживает форматирование выводимых результатов в удобочитаемой форме. В нем определен следующий метод:
string ToString(string format, IFormatProvider formatProvider)
где format обозначает инструкции для форматирования, a formatProvider — поставщик формата.
---------------------------
ПРИМЕЧАНИЕ
Подробнее о форматировании речь пойдет в главе 22.
---------------------------
Интерфейсы IObservable и IObserver
В версию .NET Framework 4.0 добавлены еще два интерфейса, поддерживающие шаблон наблюдателя: IObservable
и IObserver
. В шаблоне наблюдателя один класс (в роли наблюдаемого) предоставляет уведомления другому классу (в роли наблюдателя). С этой целью объект наблюдаемого класса регистрирует объект наблюдающего класса. Для регистрации наблюдателя вызывается метод Subscribe()
, который определен в интерфейсе IObservable
и которому передается объект типа IObserver
, принимающий уведомление. Для получения уведомлений можно зарегистрировать несколько наблюдателей. А для отправки уведомлений всем зарегистрированным наблюдателям применяются три метода, определенные в интерфейсе IObserver
. Так, метод OnNext()
отправляет данные наблюдателю, метод OnError()
сообщает об ошибке, а метод OnCompleted()
указывает на то, что наблюдаемый объект прекратил отправку уведомлений.
ГЛАВА 22 Строки и форматирование
В этой главе рассматривается класс String
, положенный в основу встроенного в C# типа string
. Как известно, обработка символьных строк является неотъемлемой частью практически всех программ. Именно по этой причине в классе String
определяется обширный ряд методов, свойств и полей, обеспечивающих наиболее полное управление процессом построения символьных строк и манипулирования ими. С обработкой строк тесно связано форматирование данных в удобочитаемой форме. Используя подсистему форматирования, можно отформатировать данные всех имеющихся в C# числовых типов, а также дату, время и перечисления.
Строки в C#
Вопросы обработки строк уже обсуждались в главе 7, и поэтому не стоит повторяться. Вместо этого целесообразно дать краткий обзор реализации символьных строк в С#, прежде чем переходить к рассмотрению класса String
.
Во всех языках программирования строка представляет собой последовательность символов, но конкретная ее реализация отличается в разных языках. В некоторых языках программирования, например в C++, строки представляют собой массивы символов, тогда как в C# они являются объектами встроенного типа данных string
. Следовательно, string
является ссылочным типом. Более того, string
— это имя стандартного для среды .NET строкового типа System.String
. Это означает, что в C# строке как объекту доступны все методы, свойства, поля и операторы, определенные в классе String
.
После создания строки последовательность составляющих ее символов не может быть изменена. Благодаря этому ограничению строки реализуются в C# более эффективно. И хотя такое ограничение кажется на первый взгляд серьезным препятствием, на самом деле оно таковым не является. Когда требуется получить строку как разновидность уже существующей строки, достаточно создать новую строку, содержащую требующиеся изменения, и "отвергнуть" исходную строку, если она больше не нужна. А поскольку ненужные строковые объекты автоматически утилизируются средствами "сборки мусора", то беспокоиться о дальнейшей судьбе ''отвергнутых" строк не приходится. Следует, однако, подчеркнуть, что переменные ссылок на строки могут, безусловно, изменить объект, на который они ссылаются. Но сама последовательность символов в конкретном строковом объекте не подлежит изменению после его создания.
Для создания строк, которые нельзя изменить, в C# предусмотрен класс StringBuilder
, находящийся в пространстве имен System.Text
. Но на практике для этой цели чаще используется тип string
, а не класс StringBuilder
.
Класс String
Класс String определен в пространстве имен System
. В нем реализуются следующие интерфейсы: IComparable, IComparable, ICloneable, IConvertible, IEnumerable, IEnumerable
и IEquatable
. Кроме того, String
— герметичный класс, а это означает, что он не может наследоваться. В классе String
предоставляются все необходимые функциональные возможности для обработки символьных строк в С#. Он служит основанием для встроенного в C# типа string и является составной частью среды .NET Framework. В последующих разделах представлено подробное описание класса String
.
В классе String
определено несколько конструкторов, позволяющих создавать строки самыми разными способами. Для создания строки из символьного массива служит один из следующих конструкторов.
public String(char[ ] value)
public String(char[ ] value, int startlndex, int length)
Первая форма конструктора позволяет создать строку, состоящую из символов массива value. А во второй форме для этой цели из массива value извлекается определенное количество символов (length), начиная с элемента, указываемого по индексу startlndex.
С помощью приведенного ниже конструктора можно создать строку, состоящую из отдельного символа, повторяющегося столько раз, сколько потребуется:
public String(char с, int count)
где с обозначает повторяющийся символ; a count — количество его повторений.
Кроме того, строку можно создать по заданному указателю на символьный массив, используя один из следующих конструкторов.
public String(char* value)
public String(char* value, int startlndex, int length)
Первая форма конструктора позволяет создать строку из символов, доступных из массива по указателю value . При этом предполагается, что массив, доступный по указателю value , завершается пустым символом, обозначающим конец строки. А во второй форме конструктора для этой цели из массива, доступного по указателю value , извлекается определенное количество символов (length), начиная с элемента, указываемого по индексу startlndex. В этих конструкторах применяются указатели, поэтому их можно использовать только в небезопасном коде.
И наконец, строку можно построить по заданному указателю на байтовый массив, используя один из следующих конструкторов.
public String(sbyte* value)
public String(sbyte* value, int startlndex, int length)
public String(sbyte* value, int startlndex, int length, Encoding enc)
Первая форма конструктора позволяет построить строку из отдельных байтов символов, доступных из массива по указателю value. При этом предполагается, что массив, доступный по указателю value, завершается признаком конца строки. Во второй форме конструктора для этой цели из массива, доступного по указателю value, извлекается определенное количество байтов символов (length), начиная с элемента, указываемого по индексу startlndex. А третья форма конструктора позволяет указать количество кодируемых байтов. Класс Encoding находится в пространстве имен System. Text. В этих конструкторах применяются указатели, и поэтому их можно использовать только в небезопасном коде.
Читать дальшеИнтервал:
Закладка: