C#でコンソールプロジェクトを作成した時に生成されるのは
class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } }
です。
Program.csもMain関数もプロジェクトファイルにも記載されていません。
ですがMain関数をエントリポイントとしてプログラムが開始されます。
C#は何を判断基準としてプログラムを実行開始しているのでしょうか。
おまじないだなんだと言われ、触れてはならない聖域のように考えていました。
今回、いたずらをしてファイル名などを変えてみて試してみます。
Program.csをNotProgram.csに変更してみる
問題なく動作します。
Programクラスをstaticクラスにしてみる
問題なく動作します。
staticなMain関数から呼べるのはstaticなメソッドだけです。
Programクラスは潔くstaticクラスにしていい気もします。
Main関数の名前をNotMainに変更してみる
コンパイルエラーになります。
プログラムは、エントリポイントに適切な静的'Main'メソッドを含んでいません。
ダメ元で、Main関数を複数のクラスに持たせてみる
class Program1 { static void Main(string[] args) { Console.WriteLine("Hello World"); Console.ReadKey(); } } class Program2 { static void Main(string[] args) { Console.WriteLine("Hello World"); Console.ReadKey(); } }
やっぱり、コンパイルエラーです。手堅いC#がそんなことを許すわけありませんね。
プログラムで複数のエントリ ポイントが定義されています。エントリ ポイントを含む型を指定するには、/main でコンパイルしてください。
さいごに
C#歴もだいぶ長くなってきて、当たり前を疑ってみました。
XamarinのiOSのプロジェクトを作成すると下記のようになります。
- Main.cs
- class Application
- static void Main(string[] args)
Main.csなのにclassがApplicationというのは嫌だから、変えたいなあと思ったのです。
また、いつものProgram.csもプログラミングだからProgramは間違っていないのですが、個人的にはニュアンスとしてはApplication.csとかの方がいいんじゃないかなあとか思った次第です。