Асинхронный ввод-вывод
Поток байтов
Тип файла FileStream
FileStream f=new FileStream(“a.txt”, mode, режим);
Режим:
FileAccess.Read – только чтение
FileAccess.Write –только запись
FileAccess.ReadWrite –чтение\запись
Mode:
FileMode.Create – новый файл. Если такой файл есть, то он стирается
FileMode.Open –открыть существующий файл
FileMode.OpenOrCreate –тоже, если файла нет, то он создается
FileMode.Append –тоже , только указатель устанавливается в конец файла
Операции над файлам:
f.Read(x,0,20) –чтение с текущей позиции в файле,где 0 и 20 нач. и кон. индексы массива x
f.Read(y) – чтение байта
f.Seak(5,4); указатель устанавливается на 5-й символ начиная с 4-ого
f.Seek(5,SeekOrigin.Begin); -на 5-й символ с начала.
a=f.ReadByte(); -прочитать байт на текущей позиции
f.Close –закрытие файла
пример стр.251
Предназначен для параллельного процесса ввода-вывода и одновременно выполнение других частей программы. Асинхронно можно работать с любыми файлами .
Пример программы
byte[] buf=new byte[100000]
FileStream f=new FileStream(“a.txt”, FileAccess.Read, FileShare.Read, buf.Lenght, true); - true указывает на признак асинхронного ввода-выводы
AsyncCallback callback=new AsyncCallback(fff);
f.BeginRead(buf,0,buf.Lenght,callback,null);
// текст программы бeз использовании buf
// место, где начинает использоваться buf
while(!KodRead){} // до тех пор пока ввод KodRead не будет установлен бесконечный цикл
Выше приведенного текста необходимо поместить установку флага KodRead=false и определить обработчик, выполнение которого осуществляется после полного процесса чтения:
bool KodRead=false;
int Rbutes;
public void fff (IAsyncResult e) //стандартно!
{
Rbutes=f. EndRead (e);
KodRead=true;
}
! После окончания процесса полного ввода выполнится процедура fff, которая и устанавливает флаг KodRead. Можно также определить и число считанных байтов Rbutes.
Объектно-ориентированное программирование
Структуры
Под структурой понимается инкансулированный набор переменных (свойств) и подпрограмм (методов).
Пример
Надо создать полный набор арифметики для комплексного числа.
1. Свойства re, и im– действ. и мнима часть числа
2. Методы:
а) переопределенные операции + - *
б) метод получения модуля
в) метод получения строки ввода на печать
Шаблон структуры:
struct complex
{
Public double re=0, im=0;
Конструктор полный
переопр. +
переопр. –
переопр. *
модуль
строка вывода
}
Конструктор полный
public complex (double re, double im)
{tris.re = re; this.im=im;} // Это переменные, объявленные свойствами в структуре.
// переопр. + (для – тоже самое, с заменой + на -)
public static complex operator + (complex a, complex b)
{
complex z;
z.re=a.re+b.re;
z.im=a.im+b.im;
return z;
}
переопр. *
public static complex operator * (complex a, complex b)
{
complex z;
z.re=a.re*b.re-a.im*b.im;
z.im= a.re*b.im+a.im*b.re;
return z;
}
Модуль
Public double CMod (complex a)
{double Z;
Z=a.re*a.re-a.im*a.im;
return z;
}
Строка вывода
Для этого надо переопределить метод ToString( ) преобразования этого типа сomplex в string
public override string ToString( )
{
return(string.Format(“{0}+i{1}”,this.re.this.im);
/\
свойства структуры
Пример программы:
complex a; // конструктор по умолчанию
complex b = new complex(1,4);
a.re=5; a.im=6;
complex y; y = a+b;
console.Writeline(“y={0}”+y); // будет выведено y=6+i10