- •Атрибуты в среде .Net и языке c#.
- •Метаданные
- •Понятие атрибутов
- •Предопределенные и собственные атрибуты
- •Потребители атрибутов
- •Применение атрибутов
- •Сокращенное именование атрибутов
- •Создание собственных атрибутов:
- •Применение собственных атрибутов:
- •Ограничение использования атрибутов:
- •Атрибуты уровня сборки и модуля:
- •Рефлексия атрибутов:
- •Выводы:
- •Язык xml. Классы платформы .Net для работы с xml-данными.
- •Синтаксис xml
- •Работа с xml при помощи System.Xml
- •Работа с xml при помощи linq to xml
- •Выводы:
- •Потоковый ввод-вывод. Файлы. Работа с файлами и каталогами. Пространство имен System.Io
- •Классы Directory (DirectoryInfo) и File (FileInfo) Некоторые общие свойства классов DirectoryInfo и FileInfo:
- •Дополнительные возможности класса DirectoryInfo
- •Дополнительные возможности класса FileInfo
- •Дополнительные члены File
- •Потоковый ввод-вывод
- •Работа с классом FileStream
- •Работа с классами StreamWriter и StreamReader
- •Классы StringWriter и StringReader
- •Работа с классами BinaryWriter и BinaryReader
- •Выводы:
- •Сериализация. Атрибуты. Стандартные форматы сериализации. Понятие сериализации объектов
- •Роль графов объектов
- •Конфигурирование объектов для сериализации
- •Общедоступные поля, приватные поля и общедоступные свойства
- •Стандартные форматеры сериализации
- •Настройка сериализации с использованием атрибутов
- •Выводы:
- •Понятие бд и субд. Язык sql. Ado.Net как средство доступа из c# к субд. Понятие бд
- •Понятие субд
- •Обзор синтаксиса
- •Подключенный уровень
- •Автономный уровень
- •Основные свойства класса DataSet
- •Основные методы класса DataSet
- •Типы DataColumn и DataRow
- •Основные члены типа DataColumn:
- •Основные члены типа DataRow:
- •Работа с адаптерами данных:
- •Основные члены класса DbDataAdapter:
- •Параллельные вычисления. Многозадачность и многопоточность.
- •Некоторые члены класс Process:
- •Некоторые члены класса ProcessThread
- •Домены приложений
- •Некоторые члены класс AppDomain:
- •Многопоточность. Классификация состояний потока. Средства многопоточного программирования System.Threading.
- •Некоторые члены пространства имен System.Threading
- •Основные члены класс Thread
- •Состояния потока
- •Многопоточное программирование при помощи асинхронных вызовов делегатов
- •Создание вторичных потоков при помощи Thread.Start()
- •Синхронизация с помощью lock
- •Синхронизация с использованием типа System.Threading.Monitor
- •Синхронизация с использованием типа System.Threading.Interlocked
- •Синхронизация с использованием атрибута [Synchronization]
- •Использование System.Threading.Timer
- •Пул потоков clr
- •Библиотека Windows.Forms. Пространства имен. Структура приложения. Элементы управления. События. Иерархия элементов управления.
- •Основные пространства имен Windows Forms
- •Структура приложения WinForms
- •Элементы управления
- •События
- •Библиотека wpf. Отличия wpf от WindowsForms. Разметка xaml. Понятие Windows Presentation Foundation
- •Типы приложений wpf
- •Основные сборки wpf
- •Построение приложения wpf без xaml
- •Построение приложения wpf с использованием только xaml
- •Пример c# обработчика события для контрола, объявленного в xaml (связь кода и xaml):
- •Создание проекта
- •Знакомство с инструментами визуального конструктора wpf
Дополнительные члены File
Тип File также поддерживает несколько уникальных членов, которые могут значительно упростить процесс чтения и записи текстовых данных.
ReadAllBytes() |
Открывает файл, читает двоичные данные как массив байт, затем закрывает файл |
ReadAllLines() |
Открывает файл, читает текстовые данные как массив строк, затем закрывает файл |
ReadAllText() |
Открывает файл, читает текстовые данные одной строкой, затем закрывает файл |
WriteAllBytes() |
Открывает указанный файл, записывает в него байтовый массив и закрывает файл |
WriteAllLines() |
Открывает указанный файл, записывает в него массив строк и закрывает файл |
WriteAllText() |
Открывает файл, записывает в него указанную строку и закрывает файл |
Потоковый ввод-вывод
Потоки предоставляют общий способ взаимодействия с последовательностью байт независимо от того, какого рода устройство (файл, сеть, соединение, принтер и т.п.) хранит или отображает эти байты. Концепция потока не ограничена файловым вводом-выводом. Точности ради следует отметить, что библиотеки .NET предоставляют потоковый доступ к сетям, областям памяти и прочим абстракциям, связанным с потоками.
В абстрактном классе System.Stream определен набор членов, которые обеспечивают поддержку синхронного и асинхронного взаимодействия с хранилищем (например, файлом или областью памяти):
CanRead CanWrite CanSeek |
Определяют, поддерживает ли текущий поток чтение, поиск и/или запись |
Close() |
Закрывает текущий поток и освобождает все его ресурсы (напрмер, файловые дескрипторы). Внутренне этот метод является псевдонимом Dispose() |
Flush() |
Если для вывода используется буфер, производит запись буфера и его очистку. Если поток не реализует буфер, метод не делает ничего |
Length |
Возвращает длину потока в байтах |
Position |
Определяет текущую позицию в потоке |
Read() ReadByte() |
Читает последовательность байт (или одиночный байт) из текущего потока и перемещает текущую позицию потока на количество прочитанных байтов |
Seek() |
Устанавливает позицию в текущем потоке |
SetLength() |
Устанавливает длину текущего потока |
Write() WriteByte() |
Пишет последовательность байт (или одиночный байт) в текущий поток и перемещает текущую позицию на количество записанных байтов |
Работа с классом FileStream
Класс FileStream предоставляет реализацию абстрактного члена Stream в манере, подходящей для потоковой работы с файлами. Это элементарный поток, и он может записывать или читать только один байт или массив байтов.
// Получить объект FileStream.
using ( FileStream fStream = File.Open(@"C:\test.dat", FileMode.Create) )
{
// Закодировать строку в виде массива байт.
string msg = "Hello!";
byte[] byteArray = Encoding.Default.GetBytes(msg);
// Записать byte[] в файл.
fStream.Write(byteArray, 0, byteArray.Length);
// Сбросить внутреннюю позицию потока.
fStream.Position = 0;
// Прочитать из файла и декодировать строку.
byte[] bytesFromFile = new byte[byteArray.Length];
// Прочитаем по байту данные
for ( int i = 0; i < byteArray.Length; i++ )
bytesFromFile[i] = (byte)fStream.ReadByte();
Console.WriteLine(Encoding.Default.GetString(bytesFromFile));
}