Что такое namespace System и как работает using в C#?
В каждом примере на C# вверху написано using System;. Что это значит? Что за System и что вообще такое namespace? Если убрать эту строку — почему всё ломается?
2 ответа
Namespace (пространство имён) — это способ сгруппировать классы и избежать конфликтов имён. Например, System.Console, System.DateTime, System.Collections.Generic.List<T> — все они лежат внутри пространства System и его подпространств.
using System; не «подключает библиотеку» в смысле загрузки — он просто говорит компилятору: «когда видишь Console, ищи его в System». Без этой строки придётся писать полное имя:
System.Console.WriteLine("Привет");
А с using — коротко:
using System;
Console.WriteLine("Привет");
В современных проектах (.NET 6+) есть implicit usings — самые ходовые пространства (System, System.Collections.Generic, System.Linq и др.) подключаются автоматически, поэтому в новых шаблонах вы можете не видеть using System; вовсе. Это включается в .csproj:
<ImplicitUsings>enable</ImplicitUsings>
Важно не путать: using System; (директива в начале файла) и using (var x = ...) (блок освобождения ресурсов) — это два совершенно разных using, просто одно ключевое слово.
Можно провести аналогию с папками и файлами. Namespace — это «папка», класс — «файл». using System; — это как добавить папку в список мест, где искать, чтобы каждый раз не писать полный путь. Свои namespace вы тоже создаёте сами: обычно по имени проекта, например namespace MyApp.Models { ... }.