.NETでは、プロセスのエントリポイントはMainメソッドになります。 このメソッドは任意の名前のクラスに持たせることができます。 プロセス名とクラス名を異なるものにすることもできます。

プロセスのエントリポイント(非同期のMainメソッド) 
using System;
using System.Threading.Tasks;

class Sample {
  // 非同期のエントリポイント (Mainメソッド)
  static async Task Main()
  {
    await Console.Out.WriteLineAsync("Hello, world!");
  }
}

エントリポイント(Mainメソッド)はstatic(VBではShared)なメソッドにする必要があります。 一方、エントリポイントを持つ型(クラスまたは構造体)自体はstaticである必要はありません。

また、誤って呼び出されてしまう可能性を排除するため、エントリポイントはpublicにするべきではないとされています。 ただし、エントリポイントをpublicにしてもエラー等にはならず、エントリポイントとしての動作に変わりはありません。

Mainという名前のメソッド以外をエントリポイントにすることはできません。 コンパイラはMainという名前のメソッドを探し、それをエントリポイントとして使用します。

プロセスの引数・コマンドライン引数を受け取りたい場合は、Mainメソッドの引数として受け取ります。 コマンドライン引数については§.コマンドライン引数で解説します。

また、Mainメソッドの戻り値をint/Integerにすることで、プロセスの終了ステータスを返すようにすることもできます。 終了ステータスについては§.終了ステータス(終了コード)で解説します。

Mainメソッドを非同期(async)メソッドとする場合、戻り値の型をTaskにします。 終了ステータスを返す場合は、Task<int>にします。 非同期のMainメソッドはC#7.1以降で使用できます。