rksoftware

Visual Studio とか C# とかが好きです

グローバルな using ディレクティブ - C# 2.0 以降の新機能まとめ (C# 10.0 ~ ) (途中)

・グローバルな using ディレクティブ (Global using directive)
  https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/using-directive#global-modifier
 どこかの1ファイルで using するだけですべてのファイルで using したことにできる機能。
 デフォルトで System System.Collections.Generic System.IO System.Linq System.Net.Http System.Threading System.Threading.Tasks System.Net.Http.Json などが暗黙に using されたことになっている。
 暗黙の global using を無効にするには .csproj ファイルで ImplicitUsings プロパティを false に設定すると回避できる (暗黙的な global using を無効化できる)。
  また .csproj の設定で暗黙的な global using がされる namespace を足したり除外したりでる。

global using System.Text;  // グローバルな using ディレクティブを宣言

internal class Class1
{
    void Method()
        => Console.WriteLine(new StringBuilder());
}
// using System.Text; していなくとも System.Text.StringBuilder が使えている
internal class Class2
{
    void Method()
        => Console.WriteLine(new StringBuilder());
}
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>true</ImplicitUsings>
  </PropertyGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <Using Remove="System" />     <!-- System 名前空間を暗黙から除外 -->
    <Using Include="System.Text" /> <!-- System.Text 名前空間を暗黙に追加 -->
  </ItemGroup>
</Project>