私はC#のConsole/Windowsアプリケーションでは、 "Main"メソッドはアプリケーションを実行するためのエントリポイントであることを知っています。ランタイムはどのクラスがC#アプリケーションのMainメソッドを含むかをどのように知っていますか?
アプリケーションに何百ものクラスがある場合、アプリケーションを実行する「メイン」メソッドがどのクラスに含まれているかをランタイムが検出する方法を教えてください。
私はC#のConsole/Windowsアプリケーションでは、 "Main"メソッドはアプリケーションを実行するためのエントリポイントであることを知っています。ランタイムはどのクラスがC#アプリケーションのMainメソッドを含むかをどのように知っていますか?
アプリケーションに何百ものクラスがある場合、アプリケーションを実行する「メイン」メソッドがどのクラスに含まれているかをランタイムが検出する方法を教えてください。
コンパイラは、エントリポイントを決定するために
static void Main(string[])
または
static int Main(string[])
を探します。 Main()
は、string[]
引数なしで宣言することもできます。 Main()
の機能を持つ複数のクラスがある場合は、プロジェクト設定を特に設定する必要があります。
Here's MSDNの詳細な回答。
Entry Pointは、Project Settingsで設定できます。
複数のエントリポイントがある場合は、設定する必要があります。そうしないと、プロジェクトはコンパイルされません。 –
@AustinSalonenメインメソッドが1つしかない場合は、ご意見ありがとうございますか? – Syed
'static void Main'を検索する可能性があります。 –
私は上記のURLを見てきましたが、複数のエントリーポイントがあるときはそれを指摘しています。エントリポイントが1つしかない場合、どのクラスがMainメソッドを含むかをランタイムがどのように検出するのでしょうか?すべてのクラスを検索しますか(私には1000クラスあります)? – Syed
はい、コンパイラはとにかくそれを行います。コンパイルして出力バイナリをビルドするには、プロジェクト内のすべてのシンボルのシンボルテーブルを構築する必要があります。テーブル内のMain()メソッドを見つけることは、コンパイラにとっては些細な問題です(コンパイラがその時間までに大量のデータを準備していたため、何千ものクラスを検索することは非常に高速です)。 – xxbbcc
ご意見ありがとうございます。あなたの答えを記述するその他の有用なリンク(MSDNリンクとは別)が便利です。 – Syed