Скрытые подключения
Скрытые подключения - это не ключевое слово языка,
а настройка проекта SDK: в файле .csproj
элемент ImplicitUsings со значением
enable. Компилятор тогда автоматически
добавляет набор директив using
ко всем исходникам. В коде их не видно, но типы
из этих пространств доступны как при явном
подключении.
Синтаксис
<ImplicitUsings>enable</ImplicitUsings>
Фрагмент задают внутри PropertyGroup файла
проекта. Для консольного приложения SDK обычно
подставляет System, System.Collections.Generic,
System.IO, System.Linq, System.Net.Http,
System.Threading и System.Threading.Tasks.
Пример
При включённых скрытых подключениях программа
без своих using всё равно компилируется:
class Program
{
static void Main()
{
List<int> nums = new List<int> { 1, 2, 3, 4, 5 };
Console.WriteLine(nums.Count);
}
}
Результат выполнения кода:
5
Здесь работают List и Console только
потому, что проект собран с ImplicitUsings.
Пример
Тот же проект может использовать System.Linq
без строки подключения:
class Program
{
static void Main()
{
int[] nums = { 1, 2, 3, 4, 5 };
int max = nums.Max();
Console.WriteLine(max);
}
}
Результат выполнения кода:
5
Пример
Явная директива в файле не запрещена - она дополняет автоматический набор:
using System.Text;
class Program
{
static void Main()
{
StringBuilder sb = new StringBuilder();
sb.Append("abcde");
Console.WriteLine(sb.ToString());
}
}
Результат выполнения кода:
"abcde"
Пример
Чтобы увидеть все директивы, можно отключить
скрытые подключения и добавить using вручную:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<string> items = new List<string>
{
"a", "b", "c", "d", "e"
};
Console.WriteLine(items[0]);
}
}
Результат выполнения кода:
"a"
Смотрите также
-
global using,
которое задают вручную на весь проект -
директива
using,
которую пишут в начале файла -
код без класса,
где скрытые подключения особенно заметны -
пространство имён,
которое организует типы в проекте