C# 4.0 полное руководство - 2011
Шрифт:
// Здесь и далее псевдоним MyCounter используется // вместо составного имени Counter.CountDown.
MyCounter cdl = new MyCounter(10); int i;
do {
i = cdl... Count ;
Console.Write(i + " ");
} while (i > 0);
Console.WriteLine ;
MyCounter cd2 = new MyCounter (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 ;
}
}
Псевдоним MyCounter создается
using MyCounter = Counter.CountDown;
После того как псевдоним будет определен в качестве другого имени класса Counter. CountDown, его можно использовать для объявления объектов без дополнительного определения имени данного класса. Например, в следующей строке кода из рассматриваемой здесь программы создается объект класса CountDown.
MyCounter cdl = new MyCounter (10);
Аддитивный характер пространств имен
П04 одним именем можно объявить несколько пространств имен. Это дает возможность распределить пространство имен по нескольким файлам или даже разделить его в пределах одного и того же файла исходного кода. Например, в приведенной ниже программе два пространства имен определяются под одним и тем же именем Counter. Одно из них содержит класс CountDown, а другое — класс CountUp. Во время компиляции содержимое обоих пространств имен Counter складывается.
// Аддитивный характер пространств имен, using System;
// Сделать видимым пространство имен Counter, using Counter;
// Это одно пространство имен 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 CountUp { int val; int target;
public int Target { get{
return target;
}
}
public CountUp(int n) { target = n; val = 0;
}
public void Reset(int n) { target = n; val = 0;
}
public int Count {
if(val < target) return val++;
else return target;
}
}
}
class NSDemo5 {
static void Main {
CountDown cd = new CountDown(10); CountUp cu = new CountUp(8);
int i; do {
i = cd.Count ;
Console^.Write (i + " ;
} -while (i > 0) ;
Console.WriteLine ;
do {
i = cu.Count ;
Console.Write(i + " ");
} while(i < cu.Target);
}
}
Вот к какому результату приводит выполнение этой программы.
10 9876543210 012345678
Обратите также внимание на то, что директива
using Counter;
делает видимым все содержимое пространства имен Counter. Это дает возможность обращаться к классам CountDown и CountUp непосредственно, т.е. без дополнительного указания пространства имен. При этом разделение пространства имен Counter на две части не имеет никакого значения.
Вложенные пространства имен
Одно пространство имен может быть вложено в другое. В качестве примера рассмотрим следующую программу.
// Вложенные пространства имен.
using System;
namespace NS1 { class ClassA {
public ClassA {
Console.WriteLine("Конструирование класса ClassA");
}
}
namespace NS2 { // вложенное пространство имен class ClassB {