セージ の メモ書き

メモこそ命の恩人だ

C# - global using ディレクティブ

global using ディレクティブ

docs.microsoft.com

  • global 修飾子を using ディレクティブに追加すると、該当プロジェクトの全ファイルに using が適用される。
  • global 修飾子の使用ルールを決めた方が良い。"エントリーポイントで使用する"など。
  • 利点
    • 頻繁に使用する using が記述不要になる。(共通ライブラリ etc.)
    • using の割れ窓状態を改善できる。(並び替え、未使用 etc.)

Debug クラスを使用するため、"global using System.Diagnostics;" を指定する。

global using System.Diagnostics;

namespace ConsoleApp1
{
    internal class Class1
    {
        public void Sample1()
        {
            Debug.WriteLine("お試し");
        }
    }
}

using なしで、Debug クラスを使用する。

// using System.Diagnostics;
// コメントを外してもビルドエラーにならないことを確認。
// "using ディレクティブは必要ありません" と表示される。

namespace ConsoleApp1
{
    internal class Class2
    {
        public void Sample2()
        {
            Debug.WriteLine("お試し");
            // using System.Diagnostics; なしで使用できることを確認。
        }
    }
}


暗黙的な global using

docs.microsoft.com

  • global using を暗黙的に適用できる。
  • 方法
    • プロジェクトのプロパティで "暗黙的な global using" を有効にする。
  • フレームワークごとに global using の内容が異なる。
    • obj フォルダーに "プロジェクト名.GlobalUsings.g.cs" が生成される。
    • この中に global using に定義されている。

コンソール

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

ASP.NET MVC

// <auto-generated/>
global using global::Microsoft.AspNetCore.Builder;
global using global::Microsoft.AspNetCore.Hosting;
global using global::Microsoft.AspNetCore.Http;
global using global::Microsoft.AspNetCore.Routing;
global using global::Microsoft.Extensions.Configuration;
global using global::Microsoft.Extensions.DependencyInjection;
global using global::Microsoft.Extensions.Hosting;
global using global::Microsoft.Extensions.Logging;
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Net.Http.Json;
global using global::System.Threading;
global using global::System.Threading.Tasks;

WPF

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Linq;
global using global::System.Threading;
global using global::System.Threading.Tasks;

Form

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;



以上