Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Пространства имён в C#: организация кода и избежание конфликтов имён

Что такое пространство имён

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

Объявление пространства имён

namespace MyCompany.MyProject.Module
{
    public class MyClass { }
    public struct MyStruct { }
    public interface IMyInterface { }
}

Иерархия разделяется точками. Можно вкладывать:

namespace Outer
{
    namespace Inner { }
    // или
    namespace Outer.Inner { }
}

Использование типов из пространств имён

1. Полное имя (fully qualified name)

System.Console.WriteLine("Hello");
MyCompany.Project.ClassName obj = new MyCompany.Project.ClassName();

2. Директива using

using System;           // доступ к типам в System без префикса
using MyCompany.Project; // доступ к типам в MyCompany.Project

Console.WriteLine("Hello"); // вместо System.Console.WriteLine
var obj = new ClassName();  // вместо MyCompany.Project.ClassName

3. Псевдонимы (using alias)

using Project = MyCompany.Long.Namespace.Project;
using StringList = System.Collections.Generic.List;

Project.ClassName obj = new();
StringList list = new();

Полезно для разрешения конфликтов имён или сокращения длинных имен.

4. using static (C# 6.0+)

using static System.Console;
using static System.Math;

WriteLine(Sqrt(16)); // вместо Console.WriteLine(Math.Sqrt(16))

Пример: два класса с одинаковым именем

namespace FirstSpace
{
    public class MyClass { public void Func() => Console.WriteLine("FirstSpace"); }
}

namespace SecondSpace
{
    public class MyClass { public void Func() => Console.WriteLine("SecondSpace"); }
}

class Program
{
    static void Main()
    {
        FirstSpace.MyClass f = new FirstSpace.MyClass();
        SecondSpace.MyClass s = new SecondSpace.MyClass();
        f.Func(); // FirstSpace
        s.Func(); // SecondSpace
    }
}

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

namespace Company
{
    namespace Department
    {
        namespace Team
        {
            public class Employee { }
        }
    }
}

// Доступ
Company.Department.Team.Employee emp = new();
using Company.Department.Team;
Employee emp2 = new();

Глобальное пространство имён

Если имя типа конфликтует с типом в глобальном пространстве, используйте префикс global:::

namespace System
{
    class Console { } // перекрывает System.Console
}

class Test
{
    static void Main()
    {
        global::System.Console.WriteLine("Real Console"); // доступ к настоящему
    }
}

File-scoped namespaces (C# 10+)

Лаконичный синтаксис для файла с одним пространством имён:

namespace MyProject.MyModule;

public class MyClass { } // автоматически в MyProject.MyModule

Лучшие практики

Язык C

  1. C# Hello World — создание вашего первого C# приложения
  2. Понимание ключевых слов и идентификаторов C#: правила, списки и лучшие практики
  3. Мастерство C# переменных и примитивных типов данных: полное руководство
  4. Операторы C# — исчерпывающее руководство по операторам в C#
  5. Освоение побитовых и сдвиговых операторов в C#: полное руководство
  6. Основы ввода-вывода в C#: Console.WriteLine, ReadLine и форматирование
  7. Выражения, операторы и блоки в C#: подробное руководство с примерами
  8. Освоение комментариев в C#: виды, лучшие практики и XML-документация
  9. Освоение оператора switch в C#: синтаксис, примеры и лучшие практики
  10. Тернарный оператор в C#: краткое руководство по условным выражениям