Полное руководство по языку программирования С# 14 и платформе .NET 10 / Классы, структуры и пространства имен

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

Начальный ⏱ 4 мин чтения 👁 2 🕓 обновлено 11.08.2026

Обычно определяемые классы и другие типы в .NET не существуют сами по себе, а заключаются в специальные контейнеры - пространства имен. Пространства имен позволяют организовать код программы в логические блоки, поволяют объединить и отделить от остального кода некоторую функциональность, которая связана некоторой общей идеей или которая выполняет определенную задачу.

Для определения пространства имен применяется ключевое слово namespace, после которого идет название название пространства имен:


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

Например, определим в файле Program.cs пространство имен, которое будет называться Base


namespace Base
{
    class Person
    {
        string name;
        public Person(string name) => this.name = name;
        public void Print() => Console.WriteLine($"Имя: {name}");
    }
}

Здесь пространство имен содержит класс Person, которой имеет одну переменную - name, конструктор и метод Print.

Теперь попробуем использовать класс Person:


Person tom = new Person("Tom"); // Ошибка - Visual Studio не видит класс Person
tom.Print();

namespace Base
{
    class Person
    {
        string name;
        public Person(string name) => this.name = name;
        public void Print() => Console.WriteLine($"Имя: {name}");
    }
}

Здесь на первой строке мы столкнемся с ошибкой, так как Visual Studio не может найти класс Person. Чтобы все-таки обратиться к классу Person, необходимо использовать полное имя этого класса с учетом пространства имен:


Base.Person tom = new("Tom");
tom.Print();          // Имя: Tom

namespace Base
{
    class Person
    {
        string name;
        public Person(string name) => this.name = name;
        public void Print() => Console.WriteLine($"Имя: {name}");
    }
}

Поскольку класс Person располагается в пространстве имен Base, то его полное имя - Base.Person. Соответственно, используя это имя, мы можем обращаться к данному классу вне его пространства имен.

Подключение пространства имен

Однако полное имя класса с учетом пространства имен добавляет в код избыточность - особенно, если пространство имен содержит множество классов, которые мы хотим использовать. И чтобы не писать полное имя класса, мы можем просто подключить пространство имен с помощью директивы using:


using Base; // подключение пространства имен Base

Person tom = new("Tom");
tom.Print();     // Имя: Tom

namespace Base
{
    class Person
    {
        string name;
        public Person(string name) => this.name = name;
        public void Print() => Console.WriteLine($"Имя: {name}");
    }
}

Вложенные пространства имен

Одни пространства имен могут содержать другие. Например:


namespace Base
{
    namespace PersonTypes
    {
        class Person
        {
            string name;
            OrganisationTypes.Company company;
            public Person(string name, OrganisationTypes.Company company) 
            { 
                this.name = name; 
                this.company = company; 
            }
            public void Print()
            {
                Console.WriteLine($"Имя: {name} ");
                company.Print();
            }
        }
    }
    namespace OrganisationTypes
    {
        class Company
        {
            string title;
            public Company(string title) => this.title = title;
            public void Print() => Console.WriteLine($"Название компании: {title}");
        }
    }
}

В данном случае классы Person и Company находятся в разных вложенных пространствах имен, поэтому чтобы в классе Person использовать класс Company, надо прописывать имя класса с учетом его пространства имен: OrganisationTypes.Company (так как оба класса в итоге находятся в общем пространстве - Base, то его имя можно не указывать в названии класса) или подключать пространство имен класса Company с помощью директивы using.

Для обращения к этим классам вне пространства Base необходимо использовать всю цепочку пространств имен:


using Base.PersonTypes; // подключение пространства имен Base.PersonTypes для класса Person

Base.OrganisationTypes.Company microsoft = new("Microsoft");
Person tom = new("Tom", microsoft);
tom.Print();     // Имя: Tom   Название компании: Microsoft

namespace Base
{
    namespace PersonTypes
    {
        class Person
        {
            string name;
            OrganisationTypes.Company company;
            public Person(string name, OrganisationTypes.Company company) 
            { 
                this.name = name; 
                this.company = company; 
            }
            public void Print()
            {
                Console.WriteLine($"Имя: {name} ");
                company.Print();
            }
        }
    }
    namespace OrganisationTypes
    {
        class Company
        {
            string title;
            public Company(string title) => this.title = title;
            public void Print() => Console.WriteLine($"Название компании: {title}");
        }
    }
}

Пространства имен уровня файла

Начиная с .NET 6 и C# 10 можно определять пространства имен на уровне файла. Например, добавим в проект новый файл с кодом c#. Для этого в Visual Studio нажмем на название проекта правой кнопкой мыши и в появившемся меню выберем пункт Add -> New Item...

В окне добавления нового элемента выберем пункт Class и поле Name в качестве имени файла укажем Base.cs

После этого в проект будет добавлен файл Base.cs. Удалим из него все содержимое по умолчанию и определим в нем следующий код:


namespace Base;

class Person
{
    string name;
    public Person(string name) => this.name = name;
    public void Print() => Console.WriteLine($"Имя: {name} ");
}

Директива namespace Base в начале файла указывает, что содержимое файла будет представлять пространство имен Base.

Теперь подключим это пространство имен в файле Program.cs:


using Base; // подключение пространства имен Base

Person tom = new("Tom");
tom.Print();
Дополнительные материалы

Проверь себя

📋 Тест по теме «Пространства имен» Тест по теме

Практические задания

Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

namespace Base
{
    class _____
    {
        string name;
        public Person(string name) => this.name = name;
        public void Print() => Console.WriteLine($"Имя: {name}");
    }
}
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

Person tom = _____ Person("Tom"); // Ошибка - Visual Studio не видит класс Person
tom.Print();

namespace Base
{
    class Person
    {
        string name;
        public Person(string name) => this.name = name;
        public void Print() => Console.WriteLine($"Имя: {name}");
    }
}
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

Base.Person tom = _____("Tom");
tom.Print();          // Имя: Tom

namespace Base
{
    class Person
    {
        string name;
        public Person(string name) => this.name = name;
        public void Print() => Console.WriteLine($"Имя: {name}");
    }
}
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

using Base; // подключение пространства имен Base

Person tom = _____("Tom");
tom.Print();     // Имя: Tom

namespace Base
{
    class Person
    {
        string name;
        public Person(string name) => this.name = name;
        public void Print() => Console.WriteLine($"Имя: {name}");
    }
}
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

_____space _____
{
    class Person
    {
        string name;
        public Person(string name) => this.name = name;
        public void Print() => Console.WriteLine($"Имя: {name}");
    }
}
Войдите, чтобы отправить решение
Среднее Ручная проверка Расставьте строки кода в правильном порядке
+20 XP

Строки кода из примера этого урока перемешаны. Впишите их в правильном порядке, каждую строку — с новой строки.

{
namespace имя_пространства_имен
}
	// содержимое пространства имен
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «Пространства имен»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «Пространства имен», и предложите одно осмысленное изменение (например, другое входное значение или дополнительное условие). Приведите итоговый код.

namespace имя_пространства_имен
{
	// содержимое пространства имен
}
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «Пространства имен»
+30 XP

Изучите приведённый фрагмент кода и опишите, при каких входных данных или условиях он может сработать не так, как ожидается (граничный случай, отсутствие проверки и т.п.). Предложите исправленный вариант.

namespace Base
{
    class Person
    {
        string name;
        public Person(string name) => this.name = name;
        public void Print() => Console.WriteLine($"Имя: {name}");
    }
}
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «Пространства имен»
+50 XP

Соберите небольшую программу, которая последовательно демонстрирует ключевые идеи урока. Программа должна быть рабочей и содержать минимум два самостоятельно написанных фрагмента, а не просто копию примера из урока.

Войдите, чтобы отправить решение
Домашнее задание Ручная проверка Домашнее задание по теме «Пространства имен»
+25 XP

Напишите собственную небольшую программу, применяющую материал темы «Пространства имен». Используйте не менее одной конструкции, показанной в примерах урока. Прикрепите код решения и краткое описание того, что он делает.

Войдите, чтобы отправить решение

Обсуждение (0)

Войдите, чтобы оставить комментарий.