簡単な質問ですが、メインメソッドを好きなように呼び出す方法はありますか?それとも「Main()」と呼ばれる必要がありますか?
10 に答える
これはC#の規則であり、.NETランタイムの規則ではないことに注意してください。ILでは、メソッドに任意の名前を付けることができます。
.module Mane.exe
.subsystem 3
.corflags 9
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89)
.ver 2:0:0:0
}
.assembly Mane
{
.custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = ( 01 00 00 00 00 )
.custom instance void [mscorlib]System.CLSCompliantAttribute::.ctor(bool) = ( 01 00 01 00 00 )
.custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( 01 00 07 31 2E 30 2E 30 2E 30 00 00 )
.custom instance void [mscorlib]System.Resources.NeutralResourcesLanguageAttribute::.ctor(string) = ( 01 00 05 65 6E 2D 55 53 00 00 )
.permissionset reqmin
= {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'Execution' = bool(true)}}
.hash algorithm 0x00008004
.ver 1:0:0:0
}
.namespace Mane
{
.class private abstract auto ansi sealed beforefieldinit Program extends [mscorlib]System.Object
{
.method private hidebysig static void Mane() cil managed
{
.entrypoint
.maxstack 1
ldstr "Hello, World!"
call void [mscorlib]System.Console::WriteLine(class System.String)
ret
}
}
}
メインメソッドを別の方法で呼び出すこともできますが、呼び出されない限り、アプリケーションの最初のメソッドとして呼び出されることはありませんMain
。他にもいくつかの要件と注意事項があります。MSDNから:
- Mainメソッドは、プログラムのエントリポイントであり、プログラム制御が開始および終了します。
- クラスまたは構造体内で宣言されます。静的である必要があり、公開されてはなりません。
- voidまたはintreturnタイプのいずれかを持つことができます。
- Mainメソッドは、パラメーターの有無にかかわらず宣言できます。
- パラメータは、ゼロインデックスのコマンドライン引数として読み取ることができます。
- CやC++とは異なり、プログラムの名前は最初のコマンドライン引数として扱われません。
C#側でそれを行う方法はないと思いますが、ILを編集する場合は、ILの関数に.entrypointを追加するのは簡単です。ウィキペディアのCLIエントリを確認してください。
いいえ、メインと呼ばれる必要があります。Main()およびコマンドライン引数(C#プログラミングガイド)を参照してください。
Main()と呼ばれる必要があります。
メインと呼ばれる必要があります。
本当に必要な場合は、独自のメソッドを作成して、それをMainの唯一のコード行として呼び出すことができます。
public static void Main(String[] args)
{
Mane(args);
}
いいえ...メインは標準です。ただし、Mainメソッドをホストするクラスを、プロジェクトプロパティの「スタートアップオブジェクト」設定から変更することができます。
しかし、本当に、なぜあなたはしたいのですか?誰もがそれがメインであることを知っています...だからあなたはあなたのコードを見るかもしれない他の開発者を混乱させるでしょう
「メイン()およびその他のメソッド(C#とJava)」から:
すべてのC#アプリケーションには、プログラムの実行を開始する場所を指定する単一のMainメソッドが含まれている必要があります。
C#9.0以降、Main
メソッドは不要になりました。
C#9.0では、代わりにメインプログラムをトップレベルで作成することを選択できます。
using System; Console.WriteLine("Hello World!");
すべてのステートメントが許可されます。プログラムは、
using
sの後、ファイル内の型または名前空間宣言の前に実行する必要があります。これは、現在1つのメソッドしか使用できないのと同様に、1つのファイルでのみ実行できMain
ます。
これにより、ボイラープレートコードが節約され、何かをテストするためのクイックコンソールプログラムに役立ちますが、もっと深刻な場合はMain
、;を使用することをお勧めします。プログラムのエントリポイントを探している場合、ソリューション全体で検索するのは簡単ですが、名前空間/クラス/メソッドの欠如Main(
を検索するのはそれほど簡単ではありません。