Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Предотвращение конфликтов имен с помощью пространств имен
Главное преимущество пространств имен заключается в том, что объявленные в них имена не вступают в конфликт с именами, объявленными за их пределами. Например, в приведенной ниже программе определяются два пространства имен. Первым из них является представленное ранее пространство имен
Counter
, а вторым — Counter2
. Оба пространства имен содержат классы с одинаковым именем CountDown
, но поскольку это разные пространства, то оба класса CountDown
не вступают в конфликт друг с другом. Кроме того, оба пространства имен определены в одном и том же файле. Как пояснялось выше, это вполне допустимо. Безусловно, каждое из этих пространств имен можно было бы выделить в отдельный файл, если бы в этом возникла потребность.
// Пространства имен предотвращают конфликты имен.
using System;
// Объявить пространство имен Counter,
namespace Counter {
// Простой вычитающий счетчик,
class CountDown { int val;
public CountDown(int n) {
val = n;
}
public void Reset(int n) {
val = n;
}
public int Count() {
if(val > 0) return val--;
else return 0;
}
}
}
// Объявить пространство имен Counter2.
namespace Counter2 {
/* Этот класс CountDown относится к пространству имен Counter2 и поэтому не вступает в конфликт с аналогичным классом из пространства имен Counter.
*/
class CountDown {
public void Count() {
Console.WriteLine("Это метод Count() из " +
"пространства имен Counter2.");
}
}
}
class NSDemo2 {
static void Main() {
// Это класс CountDown из пространства имен Counter.
Counter.CountDown cd1 = new Counter.CountDown(10);
// Это класс CountDown из пространства имен Counter2.
Counter2.CountDown cd2 = new Counter2.CountDown();
int i;
do {
i = cd1.Count();
Console.Write(i + " ");
} while(i > 0);
Console.WriteLine();
cd2.Count();
}
}
Вот к какому результату приводит выполнение этой программы.
10 9 8 7 6 5 4 3 2 1 0
Это метод Count() из пространства имен Counter2.
Как следует из приведенного выше результата, класс CountDown из пространства имен Counter существует отдельно от класса того же названия из пространства имен Counter2, и поэтому конфликт имен не возникает. Несмотря на всю простоту данного примера, он наглядно показывает, как удается избежать конфликта имен в собственном коде и коде, написанном другими разработчиками, поместив классы с одинаковыми именами в разные пространства имен.
Директива using
Если в программе присутствуют частые ссылки на члены конкретного пространства имен, то указывать это пространство всякий раз, когда требуется ссылка на него, не очень удобно. Преодолеть это затруднение помогает директива
using
. В подавляющем большинстве приводившихся ранее примеров программ с помощью этой директивы делалось видимым глобальное для C# пространство имен System
, поэтому она отчасти вам уже знакома. Как и следовало ожидать, с помощью директивы using
можно сделать видимыми вновь создаваемые пространства имен.
Существуют две формы директивы
using
. Ниже приведена первая из них:
using имя;
где имя обозначает имя того пространства имен, к которому требуется получить доступ. Все члены, определенные в указанном пространстве имен, становятся видимыми, и поэтому могут быть использованы без дополнительного определения их имен. Директиву
using
необходимо вводить в самом начале каждого файла исходного кода перед любыми другими объявлениями или же в начале тела пространства имен.
Приведенная ниже программа является вариантом предыдущего примера, переработанным с целью продемонстрировать применение директивы
using
, делающей видимым создаваемое пространство имён.
// Продемонстрировать применение директивы using,
using System;
// Сделать видимым пространство имен Counter,
using Counter;
// Объявить пространство имен для счетчиков,
namespace Counter {
// Простой вычитающий счетчик,
class CountDown {
int val;
public CountDown(int n) {
val = n;
}
public void Reset(int n) {
val = n;
}
public int Count() {
if(val > 0)
return val--;
else return 0;
}
}
}
class NSDemo3 {
static void Main() {
// Теперь класс CountDown может быть использован непосредственно.
CountDown cd1 = new CountDown(10);
int i;
do {
i = cd1.Count();
Console.Write (i + " ") ;
} while (i > 0);
Console.WriteLine();
CountDown cd2 = new CountDown (20);
do {
i = cd2.Count();
Console.Write(i + " ");
} while (i > 0);
Console.WriteLine();
cd2.Reset(4);
do {
i = cd2.Count();
Console.Write(i + " ");
} while (i > 0);
Console.WriteLine();
}
}
В эту версию программы внесены два существенных изменения. Первое из них состоит в применении директивы
using
в самом начале программы, как показано ниже.
using Counter;
Благодаря этому становится видимым пространство имен Counter. Второе изменение состоит в том, что класс
CountDown
больше не нужно дополнительно определять с помощью пространства имен Counter, как демонстрирует приведенная ниже строка кода из метода Main()
.
Интервал:
Закладка: