» » » » Герберт Шилдт - C# 4.0 полное руководство - 2011


Авторские права

Герберт Шилдт - C# 4.0 полное руководство - 2011

Здесь можно скачать бесплатно "Герберт Шилдт - C# 4.0 полное руководство - 2011" в формате fb2, epub, txt, doc, pdf. Жанр: Прочая старинная литература. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Герберт Шилдт - C# 4.0 полное руководство - 2011
Рейтинг:
Название:
C# 4.0 полное руководство - 2011
Издательство:
неизвестно
Год:
неизвестен
ISBN:
нет данных
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "C# 4.0 полное руководство - 2011"

Описание и краткое содержание "C# 4.0 полное руководство - 2011" читать бесплатно онлайн.








П ...

}

Глобальное пространство имен

Если в программе не объявлено пространство имен, то по умолчанию используется глобальное пространство имен. Именно поэтому в примерах программ, представленных в предыдущих главах книги, не нужно было обращаться для этой цели к ключевому слову namespace. Глобальное пространство удобно для коротких программ, как в примерах из этой книги, но в большинстве случаев реальный код содержится в объявляемом пространстве имен. Главная причина инкапсуляции кода в объявляемом пространстве имен — предотвращение конфликтов имен. Пространства имен служат дополнительным средством, помогающим улучшить организацию программ и приспособить их к работе в сложной среде с современной сетевой структурой.

Применение описателя псевдонима пространства имен ::

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

объявляется в двух разных пространствах имен и затем предпринимается попытка сделать видимыми оба пространства. Допустим, что два пространства имен содержат класс MyClass. Если попытаться сделать видимыми оба пространства имен с помощью директивой sing, то имя MyClass из первого пространства вступит в конфликт с именем MyClass из второго пространства, обусловив появление ошибки неоднозначности. В таком случае для указания предполагаемого пространства имен явным образом можно воспользоваться описателем псевдонима пространства имен : :.

Ниже приведена общая форма оператора : :.

псевдоним_пространства_имен: : идентификатор

Здесь псевдоним_пространства_имен обозначает конкретное имя псевдонима пространства имен, а идентификатор — имя члена этого пространства.

Для того чтобы стало понятнее назначение описателя псевдонима пространства имен, рассмотрим следующий пример программы, в которой создаются два пространства имен, Counter и AnotherCounter, и в обоих пространствах объявляется класс CountDown. Затем оба пространства имен становятся видимыми с помощью директив using. И наконец, в методе Main () предпринимается попытка получить экземпляр объекта типа CountDown.

// Продемонстрировать необходимость описателя ::. using System;

// Использовать оба пространства имен Counter и AnotherCounter.

using Counter; using AnotherCounter;

// Объявить пространство имен для счетчиков, namespace Counter {

// Простой вычитающий счетчик, class CountDown { int val;

public CountDown(int n) { val = n;

}

// ...

}

}

// Объявить еще одно пространство имен для счетчиков, namespace AnotherCounter {

// Объявить еще один класс CountDown, принадлежащий // пространству имен AnotherCounter. class CountDown { int val;

public CountDown(int n) { val = n;

}

}

}

class WhyAliasQualifier { static void Main() { int i;

// Следующая строка, по существу, неоднозначна!

// Неясно, делается ли в ней ссылка на класс CountDown // из пространства имен Counter или AnotherCounter?

CountDown cdl = new CountDown(10); // Ошибка! !    !

// ...

}

}

Если попытаться скомпилировать эту программу, то будет получено сообщение об ошибке, уведомляющее о неоднозначности в следующей строке кода из метода Main ().

CountDown cdl = new CountDown(10); // Ошибка! !    !

Причина подобной неоднозначности заключается в том, что в обоих прострайствах имен, Counter и AnotherCounter, объявлен класс CountDown и оба пространства сделаны видимыми. Поэтому неясно, к какому именно варианту класса CountDown следует отнести приведенное выше объявление. Для.устранения подобного рода недоразумений и предназначен описатель : :.

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

// Продемонстрировать применение описателя ::.

using System; using Counter; using AnotherCounter;

// Присвоить классу Counter псевдоним Ctr. using Ctr = Counter;

// Объявить пространство имен для счетчиков, namespace Counter {

// Простой вычитающий счетчик, class CountDown { int val;

public CountDown(int n) { val = n;

}

}

}

// Объявить еще одно пространство имен для счетчиков, namespace AnotherCounter {

// Объявить еще один класс CountDown, принадлежащий // пространству имен AnotherCounter. class CountDown { int val;

public CountDown(int n) { val = n;

}

// ...

}

}

class AliasQualifierDemo { static void Main() {

// Здесь оператор :: разрешает конфликт, предписывая компилятору // использовать класс CountDown из пространства имен Counter.

Ctr::CountDown cdl = new Ctr::CountDown(10);

// ...

}

}

В этом варианте программы для класса Counter сначала указывается псевдоним Ctr в следующей строке кода.

using Ctr = Counter;

А затем этот псевдоним используется в методе Main () для дополнительного описания класса CountDown, как показано ниже.

Ctr::CountDown cdl = new Ctr::CountDown(10);

Описатель : : устраняет неоднозначность, поскольку он явно указывает на то, что следует обратиться к классу CountDown из пространства Ctr, а фактически — Counter. Именно это и делает теперь программу пригодной для компиляции.

Описатель : : можно также использовать вместе с предопределенным идентификатором global для ссылки на глобальное пространство имен. Например, в приведенной ниже программе класс CountDown объявляется как в пространстве имен Counter, так и в глобальном пространстве имен. А для доступа к варианту класса CountDown в глобальном пространстве имен служит предопределенный псевдоним global.

// Использовать псевдоним глобального пространства имен, using System;

// Присвоить классу Counter псевдоним Ctr. using Ctr = Counter;

namespace Counter {

// Простой вычитающий счетчик, class CountDown { int val;

public CountDown(int n) { val = n;

}

П ...

}

}

// Объявить еще один класс CountDown, принадлежащий // глобальному пространству имен, class CountDown { int val;

public CountDown(int n) { val = n;

}

// ...

}

class GlobalAliasQualifierDemo { static void Main() {

// Здесь описатель :: предписывает компилятору использовать // класс CountDown из пространства имен Counter.

Ctr::CountDown cdl = new Ctr::CountDown(10);

// Далее создать объект класса CountDown из // глобального пространства имен.

global::CountDown cd2 = new global::CountDown(10) ;

П ...

}

}

Обратите внимание на то, что идентификатор global служит для доступа к классу CountDown из используемого по умолчанию пространства имен.

global::CountDown cd2 = new global::CountDown(10) ;

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

И последнее: описатель псевдонима пространства имен можно применять вместе с псевдонимами типа extern, как будет показано в главе 20.

Препроцессор

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

Ниже приведены директивы препроцессора, определенные в С#.

# define

#elif

#else

#endif

#endregion


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "C# 4.0 полное руководство - 2011"

Книги похожие на "C# 4.0 полное руководство - 2011" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Герберт Шилдт

Герберт Шилдт - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Герберт Шилдт - C# 4.0 полное руководство - 2011"

Отзывы читателей о книге "C# 4.0 полное руководство - 2011", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.