netlib.narod.ru< Назад | Оглавление | Далее >

Пространства имен C#

Пространство имен (namespace) — концепция, позаимствованная из C++ и позволяющая обеспечить уникальность всех имен, используемых в конкретной программе или проекте. Иногда программисту при работе над крупным проектом не хватает удобочитаемых глобальных имен или нужны библиотеки классов сторонних разработчиков, в которых конфликтуют имена. Допустим, вы работаете над крупным проектом на С# и приобрели (в виде DLL) пару библиотек классов фирм Bovary Enterprises и Karenina Software. Обе содержат класс SuperString, который совершенно по-разному реализован в каждой из DLL, но полезен и в той, и в другой версии. К счастью, такое дублирование — не проблема, так как обе компании следовали принципам С#: использовали пространства имен. Bovary поместила код своего класса SuperString в описание имени класса, подобное такому:

  namespace BovaryEnterprises.VeryUsefulLibrary
  {
      class SuperString
      ...
  }

Нечто подобное проделала и Karenina:

  namespace KareninaSoftware.HandyDandyLibrary
  {
      class SuperString
      ...
  }

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

  BovaryEnterprises.VeryUsefulLibrary.SuperString

или

KareninaSoftware.HandyDandyLibrary.SuperString

Конечно же, придется много стучать по клавишам, но такое решение определенно работает.

Использование пространств имен было бы довольно вредным явлением, если б не существовал способ уменьшить объем ввода с клавиатуры. Для этого предназначено ключевое слово using. Пространство имен указывается один раз в инструкции using, затем это пространство имен можно не вводить при обрашении к его классам. Вот альтернативный вариант программы «hello-world» на С#:

ConsoleHelloWithUsing.cs

  //--------------------------------------------------
  // ConsoleHelloWithUsing.cs (C) 2001 by Charles Petzold
  //--------------------------------------------------

  using System;

  class ConsoleHelloWithUsing
  {
      public static void Main()
      {
          Console.WriteLine("Hello, world!");
      }
  }

Если в проекте два различных класса SuperString, из затруднения выводит использование псевдонимов с ключевым словом using:

  using Emma = Bovary.VeryUsefulLibrary;
  using Anna = Karenlna.HandyDandyLibrary;

Теперь к этим двум классам можно обращаться как:

  Emma.SuperString

и

  Anna.SuperString

Подробнее об использовании using рассказывается в руководстве по языку С#.

Более 90 пространств имен, определенных в .NET Framework, начинаются со слова System и 5 — со слова Microsoft. Наиболее важными для этой книги пространствами имен являются само System, SystemDrawing, содержащее различные классы для работы с графикой, и System WindowsForms.

Пространства имен даже позволяют давать имена, уже задействованные в .NET Framework, собственным классам. Сама .NET Framework также повторно использует некоторые имена классов. Так, она содержит три класса Timer, находящиеся в пространствах имен System.Timers, System.Threading и System.WindowsForms.

Что происходит с классами, определенными без использования пространств имен, такими как ConsoleHelloWorld и ConsoleHelloWithUsing в наших примерах? Эти имена классов входят в глобальное пространство имен (global namespace). Это не проблема для небольших самодостаточных программ, подобных этим. Однако, если я определю в этой книге класс, который может оказаться полезным в программе кого-либо другого, то помещу его в пространство имен PetzoldProgrammingWindowsWithCSharp.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz