Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Абсолютные имена типов

Абсолютные имена типов

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

// Заметьте, что здесь не используется 'using MyShapes'.
using System;
namespace MyApp {
 class ShapeTester {
  static void Main(string[] args) {
   MyShapes.Hexagon h = new MyShapes.Hexagon();
   MyShapes.Circle с = new MyShapes.Circle();
   MyShapes.Square s = new MyShapes.Square();
  }
 }
}

Обычно нет необходимости использовать полное имя. Это только увеличивает объем ввода с клавиатуры, но не дает никаких преимуществ ни с точки зрения размеров программного кода, ни с точки зрения производительности программы. На самом деле в программном коде CIL типы всегда указываются с полным именем. С этой точки зрения ключевое слово using в C# просто экономит время при наборе программного кода.

Однако абсолютные имена могут быть весьма полезны (а иногда и необходимы) тогда, когда возникают конфликты при использовании пространств имен, содержащих типы с одинаковыми именами. Предположим, что есть еще одно пространство имен My3DShapes, в котором определяются три класса для визуализации пространственных форм.

// Другое пространство форм…
using System;
namespace My3DShapes {
 // Трехмерный класс Circle.
 class circle{}
 // Трехмерный класс Hexagon.
 class Hexagon{}
 // Трехмерный класс Square.
 class Square{}
}

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

// Множество неоднозначностей!
using System;
using MyShapes;
using My3DShapes;
namespace MyApp {
 class ShapeTester {
  static void Main(string[] args) {
   // На какое пространство имен ссылаются?
   Hexagon b = new Hexagon(); // Ошибка компиляции!
   Circle с = new Circle(); // Ошибка компиляции!
   Square s = new Square(); // Ошибка компиляции!
  }
 }
}

Неоднозначность разрешится, если использовать абсолютное имя типа

// Теперь неоднозначность ликвидирована.
static void Main(string[] args) {
 Му3DShapes.Hexagon h = new My3DShapes.Hexagon();
 My3DShapes.Circle с = new My3DShrapes.Circle();
 MyShapes.Square s = new MyShapes.Square();
}

Оглавление книги


Генерация: 3.807. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз