Герберт Шилдт - 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: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
int WriteTimeout- Представляет продолжительность времени ожидания в операциях - вывода. Доступно как для чтения, так и для записи
Производными от класса Stream
являются несколько конкретных классов байтовых потоков. Эти классы определены в пространстве имен System.IO
и перечислены ниже.
Класс потока Описание
BufferedStream- Заключает в оболочку байтовый поток и добавляет буферизацию. Буферизация, как правило, повышает производительность
FileStream- Байтовый поток, предназначенный для файлового ввода-вывода
MemoryStream- Байтовый поток, использующий память для хранения данных
UnmanagedMemoryStream- Байтовый поток, использующий неуправляемую память для хранения данных
В среде NET Framework поддерживается также ряд других конкретных классов потоков, в том числе для ввода-вывода в сжатые файлы, сокеты и каналы. Кроме того, можно создать свои собственные производные классы потоков, хотя для подавляющего числа приложений достаточно и встроенных потоков.
Для создания символьного потока достаточно заключить байтовый поток в один из классов-оболочек символьных потоков. На вершине иерархии классов символьных потоков находятся абстрактные классы TextReader
и TextWriter
. Так, класс TextReader
организует ввод, а класс TextWriter
— вывод. Методы, определенные в обоих этих классах, доступны для всех их подклассов. Они образуют минимальный набор функций ввода-вывода, которыми должны обладать все символьные потоки.
В табл. 14.3 перечислены методы ввода, определенные в классе TextReader
. В целом, эти методы способны генерировать исключение IOException
при появлении ошибки ввода, а некоторые из них — исключения других типов. Особый интерес вызывает метод ReadLine()
, предназначенный для ввода целой текстовой строки, возвращая ее в виде объекта типа string
. Этот метод удобен для чтения входных данных, содержащих пробелы. В классе TextReader
имеется также метод Close()
, определяемый следующим образом.
void Close()
Этот метод закрывает считывающий поток и освобождает его ресурсы.
Таблица 14.3. Методы ввода, определенные в классе TextReader
В классе TextWriter
определены также варианты методов Write()
и WriteLine()
, предназначенные для вывода данных всех встроенных типов. Ниже в качестве примера перечислены лишь некоторые из перегружаемых вариантов этих методов.
Все эти методы генерируют исключение IOException
при появлении ошибки вывода.
Кроме того в классе TextWriter
определены методы Close()
и Flush()
, приведенные ниже.
virtual void Close()
virtual void Flush()
Метод Flush()
организует вывод в физическую среду всех данных, оставшихся в выходном буфере. А метод Close()
закрывает записывающий поток и освобождает его ресурсы.
Классы TextReader
и TextWriter
реализуются несколькими классами символьных потоков, включая и те, что перечислены ниже. Следовательно, в этих классах потоков предоставляются методы и свойства, определенные в классах TextReader
и TextWriter
.
Помимо классов байтовых и символьных потоков, имеются еще два класса двоичных потоков, которые могут служить для непосредственного ввода и вывода двоичных данных — BinaryReader
и BinaryWriter
. Подробнее о них речь пойдет далее в этой главе, когда дойдет черед до файлового ввода-вывода.
А теперь, когда представлена общая структура системы ввода-вывода в С#, отведем оставшуюся часть этой главы более подробному рассмотрению различных частей данной системы, начиная с консольного ввода-вывода.
Консольный ввод-вывод
Консольный ввод-вывод осуществляется с помощью стандартных потоков, представленных свойствами Console.In, Console.Out
и Console.Error
. Примеры консольного ввода-вывода были представлены еще в главе 2, поэтому он должен быть вам уже знаком. Как будет показано ниже, он обладает и рядом других дополнительных возможностей.
Но прежде следует еще раз подчеркнуть, что большинство реальных приложений C# ориентированы не на консольный ввод-вывод в текстовом виде, а на графический оконный интерфейс для взаимодействия с пользователем, или же они представляют собой программный код, используемый на стороне сервера. Поэтому часть системы ввода-вывода, связанная с консолью, не находит широкого практического применения. И хотя программы, ориентированные на текстовый ввод-вывод, отлично подходят в качестве учебных примеров, коротких сервисных программ или определенного рода программных компонентов, для большинства реальных приложений они не годятся.
Поток Console.In
является экземпляром объекта класса TextReader
, и поэтому для доступа к нему могут быть использованы методы и свойства, определенные в классе TextReader
. Но для этой цели чаще все же используются методы, предоставляемые классом Console
, в котором автоматически организуется чтение данных из потока Console.In
. В классе Console
определены три метода ввода. Два первых метода, Read()
и ReadLine()
, были доступны еще в версии .NET Framework 1.0. А третий метод, ReadKey()
, был добавлен в версию 2.0 этой среды.
Для чтения одного символа служит приведенный ниже метод Read()
.
static int Read()
Метод Read()
возвращает очередной символ, считанный с консоли. Он ожидает до тех пор, пока пользователь не нажмет клавишу, а затем возвращает результат. Возвращаемый символ относится к типу int
и поэтому должен быть приведен к типу char
. Если при вводе возникает ошибка, то метод Read()
возвращает значение -1. Этот метод сгенерирует исключение IOException
при неудачном исходе операции ввода. Ввод с консоли с помощью метода Read()
буферизуется построчно, поэтому пользователь должен нажать клавишу , прежде чем программа получит любой символ, введенный с консоли.
Ниже приведен пример программы, в которой метод Read()
используется для считывания символа, введенного с клавиатуры.
// Считать символ, введенный с клавиатуры.
using System;
Интервал:
Закладка: