Пространство имен в C#
В этом руководстве вы узнаете о пространствах имен, о том, как их определять, как получать доступ к их членам и использовать в программах на C#.
Пространства имен в C# определяет область кода, в которой гарантируется уникальность всех идентификаторов. Это своеобразные контейнеры, в которых находятся другие пространства имен, классы и т. д.
Пространство имен может включать следующие типы данных:
- другие пространства имен;
- классы;
- интерфейсы;
- структуры;
- делегаты.
Мы обсудим эти темы в следующих уроках. Пока поговорим только о классах и пространствах имен.
Пространства имен — необязательная часть программы на C#. Они нужны, чтобы управлять крупными проектами и писать чистый код.
Давайте разберемся с концепцией пространства имен на примере из реальной жизни. У вас на компьютере, скорее всего, куча файлов и папок. Представьте, как бы сложно было ими управлять, если бы они все лежали в одном каталоге. Вот почему мы помещаем связанные файлы и папки в отдельные каталоги. Это упрощает работу с данными.
Так же и с пространствами имен: они помогают нам организовывать разные члены, если мы поместим их в одно и то же пространства.
Пространство имен еще и решает проблему конфликта имен. Он возникает, когда два одинаковых идентификатора находятся в одной области видимости, и компилятор не может понять, какой из этих двух следует использовать в конкретной ситуации.
Определяем пространства имен
В C# определить пространство имен можно с помощью ключевого слова namespace
.
namespace имя_пространства_имен
{
// Тело пространства имен
}
Например:
namespace MyNamespace
{
class MyClass
{
public void MyMethod()
{
System.Console.WriteLine("Создаем пространство имен");
}
}
}
В приведенном выше примере мы создали пространство имен с именем MyNamespace
. Оно состоит из класса MyClass
. MyMethod
в свою очередь — метод класса MyClass
.
Доступ к членам пространства имен
Доступ к членам пространства имен можно получить с помощью оператора .
. Вот, как это делается:
Имя_пространства_имен.Имя_члена
Например, если нам нужно создать объект класса MyClass
, это можно сделать вот так:
MyNamespace.MyClass myClass = new MyNamespace.MyClass();
Мы обсудим создание объектов в следующих уроках. А пока просто постарайтесь понять, как мы получаем доступ к классу MyClass
.
Пример 1. Объявляем пространство имен
using System;
namespace MyNamespace
{
public class SampleClass
{
public static void myMethod()
{
Console.WriteLine("Создаем пространство имен");
}
}
}
namespace MyProgram
{
public class MyClass
{
public static void Main()
{
MyNamespace.SampleClass.myMethod();
}
}
}
Вывод:
Создаем пространство имен
В приведенной выше программе мы создали пространство имен MyNamespace
и получили доступ к его членам из метода Main()
класса MyClass
. Как было сказано ранее, оператор .
используется для доступа к членам пространства имен.
В методе Main()
метод myMethod()
вызывается с помощью оператора .
.
Ключевое слово using
Пространство имен можно включить в программу с помощью ключевого слова using
. Вот, как это делается:
using Namespace-Name;
Например:
using System
Преимущество такого подхода заключается в том, что нам не нужно указывать полное имя члена пространства имен каждый раз, когда мы обращаемся к нему.
Если в начале программы мы написали
using System
дальше спокойно можно писать
Console.WriteLine ("Привет, мир!");
вместо полного имени
System.Console.WriteLine ("Привет, мир!");
Вложенное пространство имен
Внутри одного пространства имен может содержаться другое пространство имен. Это называется вложенным пространством имен. Доступ к вложенному пространству имен и его членам получается точно так же, с помощью оператора .
.
Синтаксис
namespace Имя_пространства_имен
{
namespace Имя_вложенного_пространства_имен
{
// Тело вложенного пространства имен
}
}
Пример 2. Работаем с вложенным пространством имен
using System;
// Вложенное пространство имен
namespace MyNamespace
{
namespace Nested
{
public class SampleClass
{
public static void myMethod()
{
Console.WriteLine("Пример вложенного пространства имен");
}
}
}
}
namespace MyProgram
{
public class MyClass
{
public static void Main()
{
MyNamespace.Nested.SampleClass.myMethod();
}
}
}
Вывод:
Пример вложенного пространства имен