ヒント
ソフトウェアの開発は初めてですか? 最初に、 作業の開始 に関するチュートリアルから始めます。 プログラムの構造について学習する前に、最初の C# プログラムを記述する手順について説明します。
別の言語で経験がありますか? C# 固有の構文については、はじめセクションにざっと目を通してから、ここに戻ってくると良いでしょう。
これらの主要な構成要素から C# プログラムをビルドします。名前空間は型を整理し、型 (クラス、構造体、インターフェイス、列挙型、デリゲート)、動作とデータを定義し、ステートメントと式は実行時に処理を実行します。 エントリ ポイントを構成する方法は、選択したアプリケーション スタイルによって異なります。
アプリケーション スタイルの選択
C# プログラムを作成するときは、その構成方法について 2 つの独立した選択を行います。
-
ファイルベースかプロジェクトベースか
- ファイル ベースのアプリは、プロジェクト ファイルのない 1 つの
.csファイルから実行されます。 - プロジェクト ベースのアプリは、
.csprojファイルを使用し、複数のソース ファイルにまたがることができます。
- ファイル ベースのアプリは、プロジェクト ファイルのない 1 つの
-
最上位レベルのステートメントまたは
Mainメソッド- 最上位レベルのステートメントを使用すると、ファイルの先頭に実行可能コードを直接記述できます。
-
Mainメソッドは、明示的な静的メソッドでエントリ ポイントをラップします。
プロジェクト ベースのアプリとファイル ベースのアプリの両方で、エントリ ポイント スタイルがサポートされます。
ファイル ベースのアプリとプロジェクト ベースのアプリ
C# 14 および .NET 10 以降では、 ファイル ベースのアプリ を使用すると、プロジェクト ファイルなしで 1 つの *.cs ファイルに含まれるプログラムを実行できます。
hello-world.csという名前のファイルに次のコードを格納し、dotnet run hello-world.csまたはdotnet hello-world.csで実行します。
#!/usr/bin/env dotnet
Console.WriteLine("Hello, World!");
注
#!行を使用すると、Unix シェルでファイルを直接実行できます。 任意の Unix システムで、 実行 (+x) アクセス許可を設定し、コマンド ラインからファイルを実行します。
ファイル ベースのアプリでは、すべての C# 構文がサポートされ、 プリプロセッサ ディレクティブを 使用してビルド システムを構成できます。 小さなコマンド ライン ユーティリティ、プロトタイプ、実験には、ファイル ベースのアプリを使用します。 ファイル ベースのアプリは、ディレクトリ内の 1 つのファイルで構成されます。
my-app/
└── hello-world.cs
プロジェクト ベースのアプリ では、 .csproj ファイルと .NET CLI コマンドdotnet new、 dotnet build、および dotnet run ワークフローが使用されます。 プログラムが複数のファイルにまたがる場合や、きめ細かなビルド構成が必要な場合は、プロジェクトベースのアプリを選択します。 プロジェクト ベースのアプリには、1 つ以上のソース ファイルと共にプロジェクト ファイルが含まれています。
my-app/
├── my-app.csproj
├── Program.cs
├── Models/
│ └── Person.cs
└── Services/
└── GreetingService.cs
ファイルベースのアプリが大きくなると、プロジェクトベースのアプリに簡単に変換できます。
dotnet project convert実行して、既存のソース ファイルからプロジェクト ファイルを生成します。
アプリで最初から複数のソース ファイルが必要であることがわかっている場合は、プロジェクト ベースのアプリから始めます。 変換手順を回避し、コードを別のファイルにすぐに整理できます。
最上位レベルのステートメントと Main メソッド
最上位レベルのステートメントを使用すると、実行可能コードをクラスおよびMain メソッドでラップすることなく、1 つのファイルに直接記述できます。 このスタイルは、 dotnet new consoleを使用して新しいコンソール アプリを作成する場合の既定値です。 次の例は、 最上位レベルのステートメントを使用する最新の C# プログラムを示しています。
Console.WriteLine("Hello, World!");
namespace YourNamespace
{
class YourClass
{
}
struct YourStruct
{
}
interface IYourInterface
{
}
delegate int YourDelegate();
enum YourEnum
{
}
}
最上位レベルのステートメントを含めることができるのはプロジェクト内の 1 つのファイルだけです。エントリ ポイントはそのファイル内のプログラム テキストの最初の行です。 より大きなプログラムをビルドする際には、より多くのプログラム要素を含めます。
明示的な静的 Main メソッドをプログラムのエントリ ポイントとして定義することもできます。
// A skeleton of a C# program using an explicit Main method
namespace YourNamespace;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
エントリ ポイントスタイルはどちらも、ファイルベースのアプリとプロジェクトベースのアプリで動作します。 どちらのスタイルも同じ機能をサポートしています。
C# プログラムのビルドと実行
C# は コンパイル済みの 言語です。 プロジェクト ベースのアプリの場合は、 dotnet build コマンドを使用して、ソース ファイルをバイナリ パッケージにコンパイルします。
dotnet runを使用して、1 つの手順でビルドして実行します。 .NET SDK に含まれる dotnet CLI には、C# プロジェクトを作成、ビルド、管理するための多くの ツール が用意されています。
ファイル ベースのアプリの場合、 dotnet run hello-world.cs は 1 つのファイルを直接コンパイルして実行します。プロジェクト ファイルは必要ありません。
式とステートメント
作業の開始に関するチュートリアルに従った場合は、式とステートメントを既に記述しています。 入力したすべてのコード行は、一方または他方 (または両方) でした。 次に、これらの用語を定義しましょう。
式とステートメントは、C# プログラムの基本的な構成要素です。 式によって値が生成されます。 ステートメントはアクションを実行し、通常はセミコロンで終わります。
次に示すのは表現です。
-
42(リテラル値) -
x + y(算術演算) -
Math.Max(a, b)(値を生成するメソッド呼び出し) -
condition ? trueValue : falseValue(条件式) -
new Person("John")(オブジェクトの作成)
ステートメントがアクションを実行します。 ステートメントは、プログラム フローの制御、変数の宣言、または操作の呼び出しを行います。 ステートメントを次に示します。
-
int x;(宣言ステートメント) -
int x = 42;(初期化を含む宣言ステートメント) -
Console.WriteLine("Hello");(メソッド呼び出しステートメント) -
if (condition) { /* code */ }(条件ステートメント) -
return result;(ステートメントを返す)
ステートメントには多くの場合、式が含まれており、式は他の式内に入れ子にすることができます。 たとえば、次の宣言ステートメントは、加算式の結果に f を割り当てます。 その加算式は、次の 2 つのメソッド呼び出し式の結果を追加します。
var maxResult = Math.Max(a, b) + Math.Max(c, d);
ステートメントの詳細については、「 ステートメント」を参照してください。 式形式のメンバーの詳細については、「 式形式のメンバー」を参照してください。
関連するコンテンツ
.NET