29
Темы лекции: Стандартный ввод-вывод. Практическое задание: Стандартный ввод-вывод. Тренер: Игорь Шкулипа, к.т.н. Платформа .Net и язык программирования C#. Занятие 4

C# Desktop. Занятие 04

Embed Size (px)

Citation preview

Page 1: C# Desktop. Занятие 04

Темы лекции: Стандартный ввод-вывод.

Практическое задание: Стандартный ввод-вывод.

Тренер: Игорь Шкулипа, к.т.н.

Платформа .Net и язык программирования C#.

Занятие 4

Page 2: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 2

Класс Console

Статический класс, предоставляющий методы для работы со стандартнойконсолью Windows.

public static class Console

При запуске консольного приложения, операционная системаавтоматически связывает 3 потока ввода-вывода с консолью:• стандартный поток ввода• стандартный поток вывода• стандартный поток вывода ошибок

Эти потоки представлены в приложении значениями свойств Console.In,Console.Out и Console.Error.

По умолчанию значением свойства In является объектSystem.IO.TextReader, а значениями свойств Out и Error — объектыSystem.IO.TextWriter. Однако имеется возможность связать этисвойства с потоками, не представляющими консоль, например спотоками, представляющими файлы. Чтобы перенаправитьстандартный ввод, стандартный вывод или стандартный поток ошибки,можно использовать соответствующий метод: Console.SetIn,Console.SetOut или Console.SetError.

Page 3: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 3

СвойстваИмя Описание

BackgroundColor Возвращает или задает цвет фона консоли.

BufferHeight Возвращает или задает высоту буферной области.

BufferWidth Возвращает или задает ширину буферной области.

CapsLockВозвращает значение, указывающее, включен или отключен режим CAPS LOCK клавиатуры.

CursorLeft Возвращает или задает позицию столбца курсора в буферной области.

CursorSize Возвращает или задает высоту курсора в символьной ячейке.

CursorTop Возвращает или задает позицию строки курсора в буферной области.

CursorVisible Возвращает или задает значение, указывающее, видим ли курсор.

Error Возвращает стандартный выходной поток сообщений об ошибках.

ForegroundColor Возвращает или задает цвет текста консоли.

In Возвращает стандартный входной поток.

InputEncodingВозвращает или задает кодировку консоли, используемую при чтении ввода.

IsErrorRedirectedПолучает значение, показывающее, был ли перенаправлен выходной поток ошибок от стандартного потока ошибок.

IsInputRedirectedПолучает значение, показывающее, был ли перенаправлены ли входные данные от стандартного входного потока.

IsOutputRedirectedПолучает значение, показывающее, был ли перенаправлены выходные данные от стандартного выходного потока.

KeyAvailableВозвращает или задает значение, указывающее, доступно ли нажатие клавиши во входном потоке.

LargestWindowHeightВозвращает максимальное число строк окна консоли с учетом текущего шрифта и разрешения экрана.

LargestWindowWidthВозвращает максимальное число столбцов окна консоли с учетом текущего шрифта и разрешения экрана.

Page 4: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 4

Свойства

NumberLockВозвращает значение, указывающее, включен или отключен режим NUM LOCK клавиатуры.

Out Возвращает стандартный выходной поток.

OutputEncodingВозвращает или задает кодировку консоли, используемую при записи вывода.

TitleВозвращает или задает заголовок для отображения в строке заголовка консоли.

TreatControlCAsInputПолучает или задает значение, указывающее, интерпретируется ли сочетание клавиш консоли Control и C (CTRL+C) как обычный ввод или как сигнал прерывания, обрабатываемый операционной системой.

WindowHeight Возвращает или задает высоту области окна консоли.

WindowLeftВозвращает или задает позицию левого края области окна консоли относительно буфера экрана.

WindowTopВозвращает или задает позицию верхнего края области окна консоли относительно буфера экрана.

WindowWidth Возвращает или задает ширину окна консоли.

Page 5: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 5

Методы

Имя Описание

Beep()Воспроизводит звуковой сигнал через динамик консоли.

Beep(Int32, Int32)Воспроизводит звуковой сигнал заданной частоты и длительности через динамик консоли.

ClearУдаляет из буфера консоли и ее окна отображаемую информацию.

MoveBufferArea(Int32, Int32, Int32, Int32, Int32, Int32)

Копирует заданную исходную область буфера экрана в заданную область назначения.

MoveBufferArea(Int32, Int32, Int32, Int32, Int32, Int32, Char, ConsoleColor, ConsoleColor)

Копирует заданную исходную область буфера экрана в заданную область назначения.

OpenStandardError()Получает стандартный поток сообщений об ошибках.

OpenStandardError(Int32)Получает стандартный поток сообщений об ошибках, для которого установлен заданный размер буфера.

OpenStandardInput() Получает стандартный входной поток.

OpenStandardInput(Int32)Получает стандартный входной поток, для которого установлен заданный размер буфера.

OpenStandardOutput() Получает стандартный выходной поток.

OpenStandardOutput(Int32)Получает стандартный выходной поток, для которого установлен заданный размер буфера.

Page 6: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 6

Методы чтения

Read Читает следующий символ из стандартного входного потока.

ReadKey()Получает следующий нажатый пользователем символ или функциональную клавишу. Нажатая клавиша отображается в окне консоли.

ReadKey(Boolean)Получает следующий нажатый пользователем символ или функциональную клавишу. Нажатая клавиша может быть отображена в окне консоли.

ReadLine Считывает следующую строку символов из стандартного входного потока.

Page 7: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 7

Методы

ResetColorУстанавливает для цветов фона и текста консоли их значения по умолчанию.

SetBufferSizeУстанавливает заданные значения высоты и ширины буферной области экрана.

SetCursorPosition Устанавливает положение курсора.

SetError Присваивает свойству Error заданный объект TextWriter.

SetIn Присваивает свойству In заданный объект TextReader.

SetOut Присваивает свойству Out заданный объект TextWriter.

SetWindowPosition Задает позицию окна консоли относительно буфера экрана.

SetWindowSize Устанавливает заданные значения высоты и ширины окна консоли.

Page 8: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 8

Методы вывода на экран

Write(bool) + 17 перегрузок Записывает значение заданного объекта в стандартный выходной поток.

WriteLine() + 18 перегрузокЗаписывает текстовое представление заданного объекта с текущим признаком конца строки в стандартный выходной поток.

Write(String, params[] args);

WriteLine(String, params[] args);

Write (“A={0}, B={1}, C={2}\n”, a, b, c);

WriteLine (“D={0}, E={1}, F={2}”, d, e, f);

Page 9: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 9

Файловый ввод-вывод

Любой ввод и вывод информации в .Net Framework включает в себяиспользование потоков.

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

Пространство имен System.IO предоставляет классы, предназначенныедля считывания и записи данных в файлы.

Page 10: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 10

Классы для работы с файлами

Класс File предоставляет статические методы для создания, копирования,удаления, перемещения и открытия файлов, а также помогает присоздании объектов FileStream.

public static class File

Класс FileStream используется для операций чтения и записи в файл,открытия и закрытия файлов в файловой системе, а также дляизменения других дескрипторов операционной системы для обработкифайлов, включая каналы, стандартный ввод и вывод. Для достижениялучшей производительности FileStream буферизирует ввод и вывод.

public class FileStream : Stream

FileStream file = new FileStream("c:\\temp.txt", FileMode.OpenOrCreate);

file.WriteByte((byte)'a');

file.Flush();

file.Close();

enum FileMode {CreateNew, Create, Open, OpenOrCreate, Truncate, Append}

Page 11: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 11

Классы для работы с файлами

Directory – содержит статические методы для манипуляциидиректориями;

Path – статических класс «путь»;

FileInfo – не обладает статическими методами, соответствуетфизическому фалу, во многом дублирует функциональность File;

StreamWriter – позволяет осуществлять запись в файл символов и строки самостоятельно выполняет все необходимые преобразования.

FileStream fs = new FileStream("c:\\file.txt", FileMode.OpenOrCreate,

FileAccess.Write);

StreamWriter sw = new StreamWriter(fs);

sw.WriteLine("hello world");

sw.Close();

StreamReader – осуществляет чтение символьных данных из потока и ихпреобразование.

Page 12: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 12

Атрибуты доступак файлам

public enum FileAccess {Read, Write, ReadWrite}

public enum FileAttributes

ReadOnly Файл доступен только для чтения.

HiddenФайл скрытый и, таким образом, не включается в обычный список каталога.

SystemФайл является системным. То есть файл является частью операционной системы или используется исключительно операционной системой.

Directory Этот файл представляет собой каталог.

ArchiveФайл является кандидатом для резервного копирования или удаления.

Device Зарезервировано для использования в будущем.

NormalФайл имеет стандартный файл, который не имеет специальных атрибутов. Этот атрибут действителен, только если используется отдельно.

Temporary

Файл является временным. Временный файл содержит данные, необходимые во время выполнения приложения, но не требуется после завершения работы приложения. Попробуйте сохранить все данные в памяти для быстрого доступа вместо сбрасывать их обратно на запоминающее файловых систем. Приложение должно стереть временный файл сразу после того, как он перестанет быть нужным.

Page 13: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 13

FileAttributes

SparseFileФайл представляет собой разреженный файл. Разреженными файлами обычно являются большие файлы, данные которого состоит в основном нули.

ReparsePointФайл содержит точку повторной обработки, блокирующую определяемые пользователем данные, связанные с файлом или каталогом.

Compressed Файл сжат.

OfflineФайл находится в автономном режиме. Данные этого файла недоступны в данный момент.

NotContentIndexedФайл не будет индексироваться службой индексирования содержимого операционной системы.

Encrypted

Зашифрованный файл или каталог. Для файла это означает, что все данные в файле зашифрованы. Для каталога это означает, что шифрование производится по умолчанию для вновь создаваемых файлов и каталогов.

IntegrityStream

Файл или каталог включает поддержку целостности данных. Когда это значение применяется к файлу, все потоки данных в файле поддерживать целостность. Когда это значение применяется в каталог, все новые файлы и вложенные папки в этой папке по умолчанию включают поддержку целостности.

NoScrubData

Файл или каталог, исключаются из проверки целостности данных. При применении этого значения в каталог по умолчанию все новые файлы и подкаталоги в каталоге, исключаются из проверки целостности данных.

Page 14: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 14

Другие классы для чтения/записи файлов

Для чтения и записи двоичных значений служат классы потоковBinaryReader и BinaryWriter.

Классы StringWriter и StringReader, позволяют обращаться с текстовойинформацией, как с потоком символов в памяти.

В абстрактных классах TextReader и TextWriter данныерассматриваются как последовательный поток символов, то есть,просто как текст.

Классы XmlReader и XmlWriter предоставляют средства чтения изаписи, обеспечивающие быстрый прямой доступ к данным XML.

Класс BufferedStream Осуществляет буферизацию в операциях чтения изаписи в потоки.

Класс MemoryStream создает поток, резервным хранилищем которогоявляется память.

Page 15: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 15

Класс общих математических функций

Статический класс Math предоставляет константы и статические методыдля тригонометрических, логарифмических и иных общихматематических функций.

Abs(Decimal) Возвращает абсолютное значение числа Decimal.

Abs(Double)Возвращает абсолютное значение числа двойной точности с плавающей запятой.

Abs(Int16)Возвращает абсолютное значение 16-разрядного знакового целого числа.

Abs(Int32)Возвращает абсолютное значение 32-разрядного знакового целого числа.

Abs(Int64)Возвращает абсолютное значение 64-разрядного знакового целого числа.

Abs(SByte)Возвращает абсолютное значение 8-битового целого числа со знаком.

Abs(Single)Возвращает абсолютное значение числа одинарной точности с плавающей запятой.

Acos Возвращает угол, косинус которого равен указанному числу.

Asin Возвращает угол, синус которого равен указанному числу.

Atan Возвращает угол, тангенс которого равен указанному числу.

Atan2Возвращает угол, тангенс которого равен отношению двух указанных чисел.

Page 16: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 16

Методы

BigMul Умножает два 32-битовых числа.

Ceiling(Decimal)Возвращает наименьшее целое число, которое больше или равно заданному десятичному числу.

Ceiling(Double)Возвращает наименьшее целое число, которое больше или равно заданному числу с плавающей запятой двойной точности.

Cos Возвращает косинус указанного угла.

Cosh Возвращает гиперболический косинус указанного угла.

DivRem(Int32, Int32, Int32)Вычисляет частное двух 32-разрядных знаковых целых чисел и возвращает остаток в выходном параметре.

DivRem(Int64, Int64, Int64)Вычисляет частное двух 64-разрядных знаковых целых чисел и возвращает остаток в выходном параметре.

Exp Возвращает e, возведенное в указанную степень.

Floor(Decimal)Возвращает наибольшее целое число, которое меньше или равно указанному десятичному числу.

Floor(Double)Возвращает наибольшее целое число, которое меньше или равно заданному числу двойной точности с плавающей запятой.

IEEERemainderВозвращает остаток от деления одного указанного числа на другое указанное число.

Log(Double)Возвращает натуральный логарифм (по основанию e) указанного числа.

Log(Double, Double)Возвращает логарифм указанного числа в системе счисления с указанным основанием.

Log10 Возвращает логарифм с основанием 10 указанного числа.

Page 17: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 17

МетодыMax(Byte, Byte) Возвращает большее из двух 8-битовых целых чисел без знака.

Max(Decimal, Decimal) Возвращает большее из двух десятичных чисел.

Max(Double, Double)Возвращает большее из двух чисел двойной точности с плавающей запятой.

Max(Int16, Int16) Возвращает большее из двух 16-битовых целых чисел со знаком.

Max(Int32, Int32) Возвращает большее из двух 32-битовых целых чисел со знаком.

Max(Int64, Int64) Возвращает большее из двух 64-битовых целых чисел со знаком.

Max(SByte, SByte) Возвращает большее из двух 8-битовых целых чисел со знаком.

Max(Single, Single)Возвращает большее из двух чисел одинарной точности с плавающей запятой.

Max(UInt16, UInt16) Возвращает большее из двух 16-битовых целых чисел без знака.

Max(UInt32, UInt32) Возвращает большее из двух 32-битовых целых чисел без знака.

Max(UInt64, UInt64) Возвращает большее из двух 64-битовых целых чисел без знака.

Min(Byte, Byte) Возвращает меньшее из двух 8-битовых целых чисел без знака.

Min(Decimal, Decimal) Возвращает меньшее из двух десятичных чисел.

Min(Double, Double)Возвращает меньшее из двух чисел двойной точности с плавающей запятой.

Min(Int16, Int16) Возвращает меньшее из двух 16-битовых целых чисел со знаком.

Min(Int32, Int32) Возвращает меньшее из двух 32-битовых целых чисел со знаком.

Min(Int64, Int64) Возвращает меньшее из двух 64-битовых целых чисел со знаком.

Min(SByte, SByte) Возвращает меньшее из двух 8-битовых целых чисел со знаком.

Min(Single, Single)Возвращает меньшее из двух чисел одинарной точности с плавающей запятой.

Min(UInt16, UInt16) Возвращает меньшее из двух 16-битовых целых чисел без знака.

Min(UInt32, UInt32) Возвращает меньшее из двух 32-битовых целых чисел без знака.

Min(UInt64, UInt64) Возвращает меньшее из двух 64-битовых целых чисел без знака.

Page 18: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 18

Методы

Pow Возвращает указанное число, возведенное в указанную степень.

Round(Decimal) Округляет десятичное значение до ближайшего целого.

Round(Double)Округляет заданное число с плавающей запятой двойной точности до ближайшего целого.

Round(Decimal, Int32)Округляет десятичное значение до указанного числа дробных разрядов.

Round(Decimal, MidpointRounding)

Округляет десятичное значение до ближайшего целого. Параметр задает правило округления значения, если оно находится ровно посредине между двумя другими числами.

Round(Double, Int32)Округляет значение двойной точности с плавающей запятой до заданного количества дробных разрядов.

Round(Double, MidpointRounding)

Округляет заданное значение число двойной точности с плавающей запятой до ближайшего целого. Параметр задает правило округления значения, если оно находится ровно посредине между двумя другими числами.

Round(Decimal, Int32, MidpointRounding)

Округляет десятичное значение до указанного числа дробных разрядов. Параметр задает правило округления значения, если оно находится ровно посредине между двумя другими числами.

Round(Double, Int32, MidpointRounding)

Округляет значение двойной точности с плавающей запятой до заданного количества дробных разрядов. Параметр задает правило округления значения, если оно находится ровно посредине между двумя другими числами.

Sign(Decimal) Возвращает значение, определяющее знак десятичного числа.

Sign(Double)Возвращает значение, определяющее знак числа двойной точности с плавающей запятой.

Page 19: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 19

Методы

Sign(Int16)Возвращает значение, определяющее знак 16-битового целого числа со знаком.

Sign(Int32)Возвращает значение, показывающее знак 32-битового целого числа со знаком.

Sign(Int64)Возвращает значение, показывающее знак 64-битового целого числа со знаком.

Sign(SByte)Возвращает значение, определяющее знак 8-битового целого числа со знаком.

Sign(Single)Возвращает значение, определяющее знак числа одинарной точности с плавающей запятой.

Sin Возвращает синус указанного угла.

Sinh Возвращает гиперболический синус указанного угла.

Sqrt Возвращает квадратный корень из указанного числа.

Tan Возвращает тангенс указанного угла.

Tanh Возвращает гиперболический тангенс указанного угла.

Truncate(Decimal) Вычисляет целую часть заданного десятичного числа.

Truncate(Double)Вычисляет целую часть заданного числа двойной точности с плавающей запятой.

Page 20: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 20

Сериализация

Сериализация - это процесс сохранения объектов в долговременной памяти(файлах) в период выполнения системы, а десериализация - это обратныйпроцесс, восстановление состояния объектов хранимых в долговременнойпамяти.

Механизмы сериализации C# и Framework .Net поддерживают два форматасохранения данных - в бинарном файле и XML-файле. В первом случае данныепри сериализации преобразуются в бинарный поток символов, который придесериализации автоматически преобразуется в нужное состояние объектов.Другой возможный преобразователь (SOAP formatter) запоминает состояниеобъекта в формате XML.

Бинарная сериализация:

using System.Runtime.Serialization;

using System.Runtime.Serialization.Formatters.Binary;

BinaryFormatter bf = new BinaryFormatter();

XML сериализация:

using System.Xml.Serialization;

XmlSerializer bf = new XmlSerializer(this.GetType());

Page 21: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 21

Пример[Serializable]

class FullNameClass {

public string Name { get; set; }

public string Surname { get; set; }

public string MiddleName { get; set; }

public FullNameClass(string name, string surname, string middle){

Name = name; Surname = surname; MiddleName = middle;

}

public void Serialize(FileStream fs){

BinaryFormatter bf = new BinaryFormatter();

bf.Serialize(fs, this);

fs.Flush();

fs.Close();

}

public void Deserialize(FileStream fs) {

BinaryFormatter bf = new BinaryFormatter();

FullNameClass deserialized = (FullNameClass)bf.Deserialize(fs);

Name = deserialized.Name;

Surname = deserialized.Surname;

MiddleName = deserialized.MiddleName;

fs.Close();

}

public void Print() {

Console.WriteLine("Name={0} Surname={1} Middle={2}", Name, Surname, MiddleName);

}

}

Page 22: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 22

Пример

class Program

{

static void Main(string[] args)

{

FileStream fs = new

FileStream("c:\\FullNameSerialize.bin",

FileMode.OpenOrCreate, FileAccess.Write);

FullNameClass fnc = new FullNameClass("Ivan", "Ivanov", "Ivanovich");

fnc.Print();

fnc.Serialize(fs);

fnc = new FullNameClass("Petr", "Petrov", "Petrovich");

fnc.Print();

fs = new

FileStream("c:\\FullNameSerialize.bin",

FileMode.OpenOrCreate, FileAccess.Read);

fnc.Deserialize(fs);

fnc.Print();

}

}

Page 23: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 23

Содержимое файла FullNameSerialize.bin

Результат работы

Name=Ivan Surname=Ivanov Middle=Ivanovich

Name=Petr Surname=Petrov Middle=Petrovich

Name=Ivan Surname=Ivanov Middle=Ivanovich

Page 24: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 24

Паттерн Memento (Хранитель)

Назначение паттерна Memento:

• Не нарушая инкапсуляции, паттерн Memento получает и сохраняетза пределами объекта его внутреннее состояние так, чтобы позжеможно было восстановить объект в таком же состоянии.

• Является средством для инкапсуляции "контрольных точек"программы.

• Паттерн Memento придает операциям "Отмена" (undo) или "Откат"(rollback) статус "полноценного объекта".

Паттерн проектирования Memento определяет трех различныхучастников:

• Originator (хозяин) - объект, умеющий создавать хранителя, атакже знающий, как восстановить свое внутреннее состояние изхранителя.

• Caretaker (смотритель) - объект, который знает, почему и когдахозяин должен сохранять и восстанавливать себя.

• Memento (хранитель) - "ящик на замке", который пишется ичитается хозяином и за которым присматривает смотритель.

Page 25: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 25

Класс Memento и интерфейс IOriginator

class Memento

{

public string Name { get; set; }

public string Surname { get; set; }

public string MiddleName { get; set; }

}

public interface IOriginator

{

object GetMemento();

void SetMemento(object memento);

}

Page 26: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 26

Класс для состояние, которого надо запомнитьclass FullNameClass: IOriginator

{

public string Name { get; set; }

public string Surname { get; set; }

public string MiddleName { get; set; }

public FullNameClass(string name, string surname, string middle) {

Name = name; Surname = surname; MiddleName = middle;

}

public void Print() {

Console.WriteLine("Name={0} Surname={1} Middle={2}", Name, Surname, MiddleName);

}

object IOriginator.GetMemento() {

return new Memento

{ Name = this.Name, Surname = this.Surname, MiddleName = this.MiddleName };

}

void IOriginator.SetMemento(object memento){

if (memento is Memento)

{

var mem = memento as Memento;

Name = mem.Name;

Surname = mem.Surname;

MiddleName = mem.MiddleName;

}

}

}

Page 27: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 27

Класс «Смотритель»

public class Caretaker

{

private object memento;

public void SaveState(IOriginator originator)

{

memento = originator.GetMemento();

}

public void RestoreState(IOriginator originator)

{

originator.SetMemento(memento);

}

}

Page 28: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 28

Использование

class Program

{

static void Main(string[] args)

{

FullNameClass fnc = new

FullNameClass("Ivan", "Ivanov", "Ivanovich");

Caretaker ct = new Caretaker();

fnc.Print();

ct.SaveState(fnc);

fnc = new FullNameClass("Petr", "Petrov", "Petrovich");

fnc.Print();

ct.RestoreState(fnc);

fnc.Print();

}

}

Результат

Name=Ivan Surname=Ivanov Middle=Ivanovich

Name=Petr Surname=Petrov Middle=Petrovich

Name=Ivan Surname=Ivanov Middle=Ivanovich

Page 29: C# Desktop. Занятие 04

http://www.slideshare.net/IgorShkulipa 29

Лабораторная работа №4. Стандартный ввод-вывод

• Создать класс текстового файла с возможностью бинарной иXML сериализации/десериализации.

• Создать класс для поиска текстовых файлов по ключевымсловам.

• Создать простой консольный редактор текстовых файлов наоснове созданных классов. Реализовать возможности откатаизменений на основе паттерна «Memento».

• Создать приложение, выполняющее индексацию текстовыхфайлов в указанной директории по заданным ключевымсловам.