C# コンソール アプリ テンプレートで最上位レベルのステートメントが生成される
.NET 6 からは、新しい C# コンソール アプリ用のプロジェクト テンプレートによって、Program.cs ファイルに次のコードが生成されます。
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
この新しい出力では、プログラムに記述する必要があるコードを簡素化できる最新の C# 機能が使用されています。 .NET 5 およびそれより前のバージョンの場合は、コンソール アプリ テンプレートによって次のコードが生成されます。
using System;
namespace MyApp // Note: actual namespace depends on the project name.
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
この 2 つの形式は、同じプログラムを表しています。 どちらも C# 10.0 で有効です。 新しいバージョンで使用する場合、記述する必要があるのは、Program
クラスが生成され、そのメソッドにすべての最上位レベルのステートメントが配置されます。 生成されたメソッドの名前は Main
ではありません。コードで直接参照できない実装の詳細です。 他のプログラム要素はコンパイラによって生成されるため、含める必要はありません。 最上位レベルのステートメントを使用するときにコンパイラによって生成されるコードについては、C# ガイドの基礎セクションにある、最上位レベルのステートメントに関する記事で詳しく説明されています。
.NET 6 以上のテンプレートを使用するように更新されていないチュートリアルを使用するには、次の 2 つのオプションがあります。
- 新しいプログラム スタイルを使用し、機能を追加する場合は、新しい最上位レベルのステートメントを追加します。
`Program` クラスと`Main` メソッドを使用して、新しいプログラム スタイルを古いスタイルに変換します。
以前のテンプレートを使用したい場合は、この記事で後に出てくる「以前のプログラム スタイルを使用する」セクションを参照してください。
新しいプログラム スタイルを使用する
新しいプログラムをより簡単にするのが、"最上位レベルのステートメント"、"グローバルの using
ディレクティブ、"暗黙的な using
ディレクティブ" の機能です。
"最上位レベルのステートメント" という言葉は、コンパイラによって、メイン プログラムのクラスおよびメソッド要素が生成されることを意味します。 コンパイラによって生成されたクラスとエントリ ポイント メソッドは、グローバル名前空間で宣言されます。 新しいアプリケーションのコードを確認すると、以前のテンプレートによって生成された Main
メソッド内にステートメントが含まれていることがわかります (ただし、グローバル空間内で)。
従来のスタイルで args
(コマンドライン引数) にアクセスし、await
を使用し、終了コードを設定することができます。 関数を追加することもできます。 これらは、生成されたエントリ ポイント メソッド内で入れ子になったローカル関数として作成されます。 ローカル関数にアクセス修飾子 (たとえば、public
や protected
) を含めることはできません。
最上位レベルのステートメントと
古い形式を使用したい場合は、この記事の 2 番目の例のコードをコピーし、前と同様にチュートリアルを続行できます。
最上位レベルのステートメントの詳細については、[最上位レベルのステートメント]。
暗黙的な `using` ディレクティブ
"暗黙的な using
ディレクティブ" という言葉は、コンパイラによって、プロジェクト タイプに基づいて一連の using
ディレクティブが自動的に追加されることを意味します。 コンソール アプリケーションの場合、次のディレクティブが、アプリケーションに暗黙的に含まれます。
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
その他のアプリケーションの種類には、それらのアプリケーションの種類でよく使われるものより多くの名前空間が含まれます。
暗黙的に含まれていない using
ディレクティブが必要な場合は、それらを最上位レベルのステートメントが含まれる .cs ファイルに追加するか、その他の .cs ファイルに追加できます。 アプリケーション内のすべての .cs ファイルに必要な using
ディレクティブに対して、グローバル using
ディレクティブ を使用します。
暗黙的な using
ディレクティブを無効にする
この動作を削除し、プロジェクトの全名前空間を手動で制御する場合、次の例のように、<PropertyGroup>
要素でプロジェクト ファイルに <ImplicitUsings>disable</ImplicitUsings>
を追加します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<ImplicitUsings>disable</ImplicitUsings>
</PropertyGroup>
</Project>
グローバル `using` ディレクティブ
"グローバル using
ディレクティブ" では、1 つのファイルではなくアプリケーション全体に対して名前空間がインポートされます。 このようなグローバル ディレクティブを追加するには、プロジェクト ファイルに <Using>
項目を追加するか、コード ファイルに global using
ディレクティブを追加します。
また、Remove
属性を持つ <Using>
項目をプロジェクト ファイルに追加し、特定の暗黙的な using
ディレクティブを削除することもできます。 たとえば、<ImplicitUsings>enable</ImplicitUsings>
で暗黙的な using
機能が有効になっている場合、次の <Using>
項目を追加すると、暗黙的にインポートされる名前空間から System.Net.Http
名前空間が削除されます。
<ItemGroup>
<Using Remove="System.Net.Http" />
</ItemGroup>
以前のプログラム スタイルを使用する
.NET SDK 6.0.300 以降では、 console
テンプレートには --use-program-main
オプションがあります。 これを使用して、最上位レベルのステートメントを使用せず、Main
メソッドを持つコンソール プロジェクトを作成します。
dotnet new console --use-program-main
次のような Program.cs
が生成されます。
namespace MyProject;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
Visual Studio で以前のプログラム スタイルを使用する
新しいプロジェクトを作成すると、セットアップ手順によって [追加情報] のセットアップ ページに移動します。 このページで、[最上位レベルのステートメントを使用しない] チェック ボックスを選択します。
プロジェクトが作成されると、
Program.cs
コンテンツは次のようになります。namespace MyProject; class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); } }
注意
Visual Studio では、同じテンプレートに基づいてプロジェクトを次回作成するときにオプションの値が保持されるため、既定では、コンソール アプリ プロジェクトを次回作成するときに、[最上位レベルのステートメントを使用しない] チェック ボックスがオンになります。
Program.cs
ファイルの内容は、グローバルな Visual Studio テキスト エディター設定や EditorConfig
ファイルで定義されているコード スタイルに合わせるために異なっている場合があります。
詳細については「EditorConfig で移植可能なカスタム エディター設定を作成する」および「[オプション]、[テキスト エディター]、[C#]、[詳細]」を参照してください。
.NET