個人的なメモ

Tomohiro Suzuki @hiro128_777 のブログです。Xamarin に関する事を中心に書いています。 Microsoft MVP for Development Technologies 2017- 本ブログと所属組織の公式見解は関係ございません。

C# 10 の新機能 - 暗黙的な using ディレクティブ

C# 10 の新機能の情報の目次は以下をご覧ください。
hiro128.hatenablog.jp 
 

暗黙的な using ディレクティブ

コンパイラによって、プロジェクトの種類ごとにあらかじめ決められたよく使われる名前空間のセットが自動的に追加されます。
例えば、コンソール アプリケーションの場合、以下の名前空間が自動的に追加されます。

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;

 
.NET 5 以前のプロジェクトを .NET 6 以降に再ターゲットするときに、暗黙的な global using ディレクティブは追加されないので注意してください(場合によっては、コンパイルできなくなります)
また、.NET 6 以降の ImplicitUsings が有効になっているプロジェクトで、この機能を無効にすると、例えば、暗黙的に宣言されていた、System 名前空間が宣言されなくなってしまい、アプリがコンパイルされなくなりますので、プロジェクト単位での有効・無効の変更時はご注意ください。
 
手動で、ImplicitUsings プロパティ を true または enable に設定することで、プロジェクト単位でこの機能を有効にすることができます。
.NET 6 以降をターゲットとする C# プロジェクトのテンプレートでは、ImplicitUsings は既定で enable に設定されています。

<PropertyGroup>
  <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

 

導入の意図

明示的に指定することなくその種類のアプリで一般的によく使われる名前空間が自動的に追加されるので多くの using 行が不要になり、ソースコードからロジック以外の要素を排除できます。
こちらも「ソースコードを簡潔にするための機能」です。
 
公式情報:
Implicit usings
.NET SDK プロジェクトの MSBuild リファレンス - ImplicitUsings プロパティ