Шаг 287.
Язык программирования C#. Начала.
Немного о разном. Использование пространства имен

    На этом шаге мы рассмотрим создание и использование пользовательского пространства имен.

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


Пространства имен могут содержать в себе другие пространства имен. Обращение к таким внутренним пространствам имен выполняется с использованием точечного синтаксиса: указывается вся цепочка вложенных пространств имен, а названия пространств разделяются точкой. Например, если пространство имен Third находится в пространстве имен Second, а пространство Second находится в пространстве имен First, то для обращения к пространству имен Third используется выражение First.Second.Third.

    Мы уже знаем, что если в программе нужно использовать пространство имен, то в начале файла с программой размещается инструкция using, после которой указывается название пространства имен. В результате классы, структуры и прочие утилиты, описанные в пространстве имен, станут доступны в программе. Если пространство имен не подключено с помощью инструкции using, то для обращения к утилитам из этого пространства необходимо перед именем утилиты (например, класса, структуры, интерфейса) указывать название пространства имен. Например, если класс MyClass описан в пространстве имен MySpace, то обращение к такому классу выполняется инструкцией вида MySpace.MyClass.

    Мы можем не только подключать уже существующие пространства имен, но и описывать собственные. Делается это просто: после ключевого слова namespace указывается название пространства имен, и в блоке из фигурных скобок описываются классы, структуры, интерфейсы, перечисления и делегаты, которые входят в это пространство имен.


Описание пространства имен может быть разбито на несколько блоков. Другими словами, мы можем описывать пространство имен не все сразу, а "по частям".

    Следовательно, шаблон описания пространства имен следующий:

namespace имя {
  // Содержимое пространства имен
}

    Ниже представлен небольшой пример, иллюстрирующий процесс описания пространства имен. В этой программе описаны два пространства имен First и Second, и каждое пространство имен содержит описание класса MyClass (то есть пространства имен содержат разные классы с совпадающими названиями).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace pr287_1
{
    // Первое пространство имен: 
    namespace First {
        // Описание класса: 
        class MyClass { 
            public int num; 
            public MyClass(int n) { 
                num = n;
            }
            public void show() {
                Console.WriteLine("Класс из First: " + num);
            }
        }
    }

    // Второе пространство имен: 
    namespace Second {
        // Описание класса: 
        class MyClass {
            public string txt; 
            public MyClass(string t) { 
                txt = t;
            }
            public void show() {
                Console.WriteLine("Класс из Second: " + txt);
            }
        }
    }

    // Главный класс: 
    class Program
    {
        // Главный метод:
        static void Main()
        {
            // Объект класса из первого пространства имен:
            First.MyClass A = new First.MyClass(123);
            // Объект класса из второго пространства имен:
            Second.MyClass B = new Second.MyClass("text");
            // Использование объектов:
            A.show();
            B.show();
            // Задержка:
            Console.ReadLine();
        }
    }
}
Архив проекта можно взять здесь.

    Результат выполнения программы такой, как показано ниже:


Рис.1. результат работы приложения

    Как отмечалось выше, оба пространства (First и Second) содержат описание класса. Классы имеют одинаковые названия MyClass, они однотипны, но это разные классы. Поскольку они относятся к разным пространствам имен, то совпадение их названий проблемой не является. Мы в программе для подключения пространств имен First или Second инструкцию using не используем, поэтому обращение к классу из пространства имен First выполняется в формате First.MyClass, а обращение к классу из второго пространства имен выполняется инструкцией вида Second.MyClass. На основе этих классов создаются объекты (команды

  First.MyClass A = new First.MyClass(123);    и 
  Second.MyClass B = new Second.MyClass("text"); 
). Затем из этих объектов вызывается метод show(), что дает возможность проверить значения полей созданных объектов (в соответствии с описанием классов, у одного объекта поле целочисленное, а у другого - текстовое).

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг