次の方法で共有


C# プログラムの一般的な構造

ヒント

ソフトウェアの開発は初めてですか? 最初に、 作業の開始 に関するチュートリアルから始めます。 プログラムの構造について学習する前に、最初の C# プログラムを記述する手順について説明します。

別の言語で経験がありますか? C# 固有の構文については、はじめセクションにざっと目を通してから、ここに戻ってくると良いでしょう。

これらの主要な構成要素から C# プログラムをビルドします。名前空間は型を整理し、型 (クラス、構造体、インターフェイス、列挙型、デリゲート)、動作とデータを定義し、ステートメントと式は実行時に処理を実行します。 エントリ ポイントを構成する方法は、選択したアプリケーション スタイルによって異なります。

アプリケーション スタイルの選択

C# プログラムを作成するときは、その構成方法について 2 つの独立した選択を行います。

  • ファイルベースかプロジェクトベースか
    • ファイル ベースのアプリは、プロジェクト ファイルのない 1 つの .cs ファイルから実行されます。
    • プロジェクト ベースのアプリは、 .csproj ファイルを使用し、複数のソース ファイルにまたがることができます。
  • 最上位レベルのステートメントまたは 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 newdotnet 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);

ステートメントの詳細については、「 ステートメント」を参照してください。 式形式のメンバーの詳細については、「 式形式のメンバー」を参照してください。