rksoftware

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

グローバルな using ディレクティブ (2)

■ C# 10.0 での新機能

・グローバルな using ディレクティブ (Global using directive)
  https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/globalusingdirective
 どこかの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 ファイルで DisableImplicitNamespaceImports プロパティを設定すると回避できます(暗黙的な global using を無効化できます)。
  .csproj で暗黙的な global using を足したり除外したりできます。

global using System.Text;

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>
    <DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
  </PropertyGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <Import Remove="System" />
    <Import Include="Test" />
  </ItemGroup>
</Project>