Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ.doc
Скачиваний:
0
Добавлен:
19.09.2019
Размер:
250.88 Кб
Скачать

Прочитать текстовый файл

В следующем образце кода используется StreamReader класс в файле System.ini. Содержимое файла добавлен ListBox элемент управления. В блок Try... catch блок используется для предупреждения программы, если он пуст. Существует множество способов определить, когда будет достигнут конец файла; в этом примере использует Просмотр метод, изучите следующую строку перед его чтением.

StreamReader reader=new StreamReader(winDir + "\\system.ini");

try

{

do

{

addListItem(reader.ReadLine());

}

while(reader.Peek() != -1);

}

catch

{

addListItem("File is empty");}

finally

{

reader.Close();

}

Запись в текстовый файл

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

StreamWriter writer = new StreamWriter("c:\\KBTest.txt");

writer.WriteLine("File created using StreamWriter class.");

writer.Close();

this.listbox1.Items.Clear();

addListItem("File Written to C:\\KBTest.txt");

  1. Контейнер (коллекция) в языке программирования C#

В С# коллекция представляет собой совокупность объектов. В среде .NET Framework имеется немало интерфейсов и классов, в которых определяются и реализуются различные типы коллекций. Коллекции упрощают решение многих задач программирования благодаря тому, что предлагают готовые решения для создания целого ряда типичных, но порой трудоемких для разработки структур данных. Например, в среду .NET Framework встроены коллекции, предназначенные для поддержки динамических массивов, связных списков, стеков, очередей и хеш-таблиц. Коллекции являются современным технологическим средством, заслуживающим пристального внимания всех, кто программирует на С#.

Первоначально существовали только классы необобщенных коллекций. Но с внедрением обобщений в версии С# 2.0 среда .NET Framework была дополнена многими новыми обобщенными классами и интерфейсами. Благодаря введению обобщенных коллекций общее количество классов и интерфейсов удвоилось. Вместе с библиотекой распараллеливания задач (TPL) в версии 4.0 среды .NET Framework появился ряд новых классов коллекций, предназначенных для применения в тех случаях, когда доступ к коллекции осуществляется из нескольких потоков. Нетрудно догадаться, что прикладной интерфейс Collections API составляет значительную часть среды .NET Framework.

Краткий обзор коллекций

Главное преимущество коллекций заключается в том, что они стандартизируют обработку групп объектов в программе. Все коллекции разработаны на основе набора четко определенных интерфейсов. Некоторые встроенные реализации таких интерфейсов, в том числе ArrayList, Hashtable, Stack и Queue, могут применяться в исходном виде и без каких-либо изменений. Имеется также возможность реализовать собственную коллекцию, хотя потребность в этом возникает крайне редко.

  1. Охарактеризовать классы .NET для работы с потоками.

Дать характеристику инструменту ООП «Наследование». Описать возможности,

Наследование, вместе с инкапсуляцией и полиморфизмом, является одной из трех основных характеристик (или базовых идей) объектно-ориентированного программирования. Наследование позволяет создавать новые классы, которые повторно используют, расширяют и изменяют поведение, определенное в других классах. Класс, члены которого наследуются, называется базовым классом, а класс, который наследует эти члены, называется производным классом.

Примечание.

Структуры не поддерживают наследование, но они могут реализовывать интерфейсы. Дополнительные сведения см. в разделе Интерфейсы (Руководство по программированию в C#).

Концептуально, производный класс является специализацией базового класса. Например, при наличии базового класса Animal, возможно наличие одного производного класса, который называется Mammal, и еще одного производного класса, который называется Reptile. Mammal является Animal, а Reptile является Animal, но каждый производный класс представляет разные специализации базового класса.

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

Ниже иллюстрируется класс WorkItem, представляющий рабочий элемент в бизнес-процессе. Как и другие классы, он является производным от System.Object и наследует все его методы. WorkItem добавляет пять собственных членов. К ним относится конструктор, поскольку конструкторы не наследуются. ChangeRequestнаследует от WorkItem и представляет определенный тип рабочего элемента. ChangeRequest добавляет еще два члена к членам, которые он наследует от WorkItem иObject. Он должен добавить свой собственный конструктор, и также он добавляет член, который позволит ChangeRequest быть связанным с исходным WorkItem, к которому применимо изменение.

Наследование классов

В следующем рисунке показано, как выражаются в C# отношения между классами, продемонстрированные в предыдущем примере. В следующем примере также показано, как WorkItem переопределяет виртуальный метод Object.ToString, и как класс ChangeRequest наследует реализацию WorkItem метода.

C#

// WorkItem implicitly inherits from Object class

public class WorkItem

{

private static int nextID;

protected int ID { get; set; }

protected TimeSpan jobLength { get; set; }

protected string Title { get; set; }

protected string Description { get; set; }

// Default constructor

public WorkItem()

{

ID = 0;

Title = "Default title";

Description = "Default description.";

jobLength = new TimeSpan();

}

// Static constructor for static member.

static WorkItem()

{

nextID = 0;

}

// Instance constructor.

public WorkItem( string title, string desc, TimeSpan joblen)

{

this.ID = GetNextID();

this.Title = title;

this.Description = desc;

this.jobLength = joblen;

}

protected int GetNextID()

{

return ++nextID;

}

public void Update(string title, TimeSpan joblen)

{

this.Title = title;

this.jobLength = joblen;

}

// Virtual method override.

public override string ToString()

{

return String.Format("{0} - {1}", this.ID, this.Title);

}

}

// ChangeRequest derives from WorkItem and adds two of its own members.

public class ChangeRequest : WorkItem

{

protected int originalItemID {get; set;}

public ChangeRequest() { }

public ChangeRequest(string title, string desc, TimeSpan jobLen, int originalID)

{

this.ID = GetNextID();

this.Title = title;

this.Description = desc;

this.jobLength = jobLen;

this.originalItemID = originalID;

}

}

class Program

{

static void Main()

{

WorkItem item = new WorkItem(

"Fix Bugs",

"Fix all bugs in my source code branch",

new TimeSpan(3, 4, 0, 0));

ChangeRequest change = new ChangeRequest("Change design of base class",

"Add members to base class",

new TimeSpan(4, 0, 0),

1);

Console.WriteLine(item.ToString());

// ChangeRequest inherits WorkItem's override of ToString

Console.WriteLine(change.ToString());

// Keep the console open in debug mode.

Console.WriteLine("Press any key to exit.");

Console.ReadKey();

}

}

/* Output:

1 - Fix Bugs

2 - Change design of base class