Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 сем Инфа готово.docx
Скачиваний:
24
Добавлен:
04.06.2015
Размер:
255.66 Кб
Скачать

Вопрос 23. Пространство имён

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

Пространства имен (namespaces) предоставляют программистам возможность логичной взаимосвязи классов и других типов. Само понятие namespaces скорее является логическим, нежели физическим (например как файл или компонент). Каждый раз когда вы обьявляете класс в C# - у вас есть возможность добавить его в пространство имен. Когда станет необходимо расширять функциональную часть программы - вы с легкостью сможете добавить несколько логически обьединенных классов в одно пространство имен.

Для примера добавим структуру Book в пространство имен BookStore:

namespace BookStore

{

public struct Book

{

// Код структуры ...

}

}

Если в дальнейшем нужно будет еще добавлять классы и структуры, которые логически связаны с продажей книг - правильно будет добавлять их в пространство имен BookStore.

Каждое имя в пространистве имен состоит из названий тех пространств имен, в которое оно входит и начинается из самого внешнего имени. Для примера: System.Windows.Forms. Такой принцип именования может дать нам слишком длинные конструкции, которые неудобно использовать в коде (System.Windows.Forms.Form) для этого в C# существует директива using, которая пишется в самом начале кода имеет вид:

using System.Windows.Forms;

Если мы подключили с помощью директивы using пространство имен System.Windows.Forms.Form - то в коде уже можно напрямую обращаться к Form (без полной записи). Важной особенностью пространств имен в C# является также и то, что они не зависят от сборок. Можно создавать различные пространства в пределах одной сборки так само, как и создавать несколько сборок в пределах одного пространства имен.

Еще одним применением ключевого слова using в C# является назначение псевдонимов классам и пространствам имен. Если у вас сложный проект и пространства имен имеют очень большую вложенность - в таком случае пространству имен назначается псевдоним, который в общем виде выглядит так:

using alias = NamespaceName;

В заключение хочется сказать что программисты, которые переходят на C# из С++ очень часто путают пространства имен с заголовочными файлами #include. Главное не путать эти понятия, так как пространства имен это не файлы - а логическое понятие, которое обьединяет классы и типы, которые имеют логические связи.

Вопрос 24. Поток.

Что такое отдельный поток? В первом приближении это некоторая отдельная часть программы, которая может выполняться параллельно с другими частями программы. Ключевое слово тут – параллельно. Т. е. в одном своем потоке программа может делать некоторое длительное действие, а в другом потоке – другое, и эти действия будут выполняться параллельно. Классический пример использования потоков можно найти в программе Word – тут в одном потоке может происходить фоновая проверка орфографии, в другом – печать текста пользователем, в третьем – сохранение файла на жесткий диск. Для использования потоков в программе мы используем пространство имен System.Threading. Простейший поток – это экземпляр класса Thread из этого пространства имен.

Рассмотрим пример использования потоков в Windows-приложении. Создайте обычное Windows-приложение на C#. Разместите на форме две кнопки, заголовки на которых поменяйте на Start Thread и MsgBox соответственно. По первой кнопке мы запустим поток, в котором бы будем выполнять некоторое продолжительное действие (оно будет длиться несколько секунд). По второй кнопке мы будем выполнять некоторое параллельное действие (там мы просто вызовем обычный MessageBox).

Вот что вы должны добавить в текст программы (т. е. в класс формы):

...

using System.Threading; // Добавляем нужное пространство имен.

...

// Первый поток.

publicThreadthr1;

// Вызываемая в потоке функция.

void f1()

{

// Запуск длинной операции.

for(int i=0; i<3000; i++)

{

// Результаты показываем в заголовке окна.

Text = i.ToString();

}

}

private void button1_Click(object sender, System.EventArgs e)

{

// Создание нового потока.

thr1 = new Thread(new ThreadStart(f1));

// Запуск нового потока.

thr1.Start();

}

private void button2_Click(object sender, System.EventArgs e)

{

// Некоторое параллельное действие.

MessageBox.Show("Some Action");

}

...

Наш поток создается в обработчике щелчка по первой кнопке. Обратите внимание, что при вызове конструктора мы указываем, что за метод будет выполняться в нашем потоке (а именно метод с именем f1):

...

thr1 = new Thread(new ThreadStart(f1));

...

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

Запускаем программу. При нажатии на первую кнопку запустится функция f1 в отдельном потоке. В заголовке окна замелькают последовательные числа. И, что самое важное, на вторую кнопку тоже можно будет нажимать до окончания работы обработчика первой кнопки – при этом появится соответствующий MessageBox.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]