Описатель : : устраняет неоднозначность, поскольку он явно указывает на то, что следует обратиться к классу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
#error
#if
#line
#pragma
#region
#undef
#warning