ほとんどの C# プログラムでメイン メソッドのエントリ ポイントが静的なのはなぜですか?
8 に答える
インスタンス メソッドを呼び出すには、オブジェクトのインスタンスが必要です。これは、プログラムを開始するProgram
ために、メソッドを呼び出すためにCLR が say のインスタンスを作成する必要があることを意味しますMain
。したがって、のコンストラクターがProgram
前に実行さMain
れ、メインを持つという目的が完全に無効になります。
私は質問を好転させます。Main をインスタンス メソッドにできる機能を実装することの魅力的な利点は何ですか? 機能は高価です。説得力のあるメリットがなければ、実装されません。
Main をインスタンス メソッドにすることを許可する正当な理由はありますか?
概念的には、スタティックのインスタンスは1つだけです。そして、静的メソッドは、プログラムの単一の開始点のイディオムにうまく対応します。言語設計者は、mainメソッドで使用する特別なプログラムクラスを作成することもできますが、エントリポイントとして単一の静的関数を作成することを選択しました。いくつかのレベルでは、それは本当に単なる設計上の選択です。
そうしないと、オブジェクトを作成する必要があり、コンストラクターを実行すると悪影響が生じる可能性があるためです。
そうでなければ、メインの前にクラスインスタンスをどのように作成できますか?
静的メソッドは、インスタンスを作成せずに実行できます。慣例により、それらはmain
呼び出すデフォルトのメソッドとしてメソッドを持っています。
.NET runtime
メソッドを呼び出しますMain
。(注: Main は、別の場所から、たとえば ExampleClass の別のメソッドのコード Main() からも呼び出すことができます。)static
キーワードは、instance
ofなしでメソッドにアクセスできるようにしExampleClass
ます。そのため、Main メソッドはエントリ ポイントであり、静的に宣言する必要があります。
そうしないと、プログラムにはインスタンスが必要になりますが、どのインスタンスにもプログラムが必要になります。
circular dependency
解決不可能なメインがエントリ ポイントとして使用されることを避けるため
参照: http://en.wikipedia.org/wiki/C_Sharp_(programming_language
クラスのすべてのオブジェクトにはメインメソッドと他のメソッドと変数が含まれているため、すべてのオブジェクトに含まれる各変数とメソッドの個別のコピーがありますが、メインクラスのコピーはそれらの間で1つだけであるため、いくつかのオブジェクト間でコピーを作成しますメインメソッドを静的にする。