2016-06-20 5 views
0

CLRは、異なる値を返すので呼び出すメソッドを知る方法(1つは無効、もう1つはint)ですか?オーバーロードの意味では、これは正しくない、異なる戻り値の型を持つ同じパラメーターを持つメソッド。どのようにC#public void static Main(String [] args){}とpublic int static Main(String [] args)オーバーロードされた2つのメソッドは一緒に動作しますか?

例:

class Program 
{ 
    static int Main(String[] args) //Main with int return type but Parameter String[] args 
    { 
      return 0; 
    } 

    /* this main method also gonna get called by CLR even though return type void and Same parameter String[] args. 
    static void Main(String[] args) //Main with int return type but String[] args 
    { 

    } */ 

    private static void func(int one) 
    { 
     Console.WriteLine(one); 
    } 

    private static int func(int one) //compiler error. two overloaded method cant have same parameter and different return type. 
    { 
     return 1; 
    } 
} 

が、メインメソッドがオーバーロードルールを維持していません。

+1

をコンパイルしないコードのサンプルを提供してください。 – Kapol

答えて

4

.NETでは、実行可能ファイルは1つのエントリポイントしか持たないため、1つのMainメソッドしか使用できません。具体的には、Mainメソッドは、シグニチャが以下のいずれかと一致し、メソッドが静的である場合にのみ、エントリポイントとみなされます。

  1. メイン(文字列[])
  2. メイン()

あなたは、その署名2以上の異なるメイン方法を提供する場合、それはメインメソッドとして考慮されていません。したがって、以下のコードは許可されています

class Program 
{ 
    static void Main()   //Entry point 
    { 
    } 

    static void Main(int number) 
    { 
    } 
} 

以下のコードは、2つの場所で一致する署名が見つかるため、コンパイルされません。コードの下

class Program 
{ 
    static void Main()   //Entry point 
    { 
    } 

    static void Main(String[] args) //another entrypoint!!! Compile Error 
    { 
    } 
} 

エントリポイントが全く存在しないためにも、

class Program 
{ 
    static void Main (int a)  //Not an Entry point 
    { 
    } 

    static void Main(float b) //Not an entry point 
    { 
    } 
} 
+0

また、一般的には、オーバーロードの場合、メソッドは単なる戻り型以外の点で異なる必要があります。 – Kevin

関連する問題