如何C#public void static Main(String [] args){}和public int static Main(String [] args)两个重载方法一起工作?

时间:2016-06-20 12:05:55

标签: c# .net

CLR如何知道要调用哪个方法,因为它们返回不同的值(一个是void而另一个是int)?在重载意义上,这也是不对的,具有相同参数和不同返回类型的方法。

示例:

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 个答案:

答案 0 :(得分:4)

在.NET中,可执行文件只能有一个入口点,即只允许一个Main方法。更具体地说,只有当sigature与以下2中的任何一个匹配且方法是静态的时,Main方法才被视为入口点。

  1. 主(字符串[])
  2. main()的
  3. 如果您提供的签名与上述签名不同的主要方法,则不会将其视为主要方法。因此,允许使用以下代码,

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

    以下代码无法编译,因为它在两个地方找到匹配的签名。

    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
        {
        }
    }