C#中Main()函数为什么必须是静态的?

假设没有static关键字,那意味着需要用生成一个实例后才可以调用这个Main方法,而Main方法是程序入口点,你没有进入Main方法,自然无法生成一个实例,既然没有实例,那就无法调用Main函数,岂不矛盾?所以Main函数被设置为static.

  Main()函数在C#里非常特殊,它是编译器规定的所有可执行程序的入口点。由于其特殊性,对Main()函数我们有以下几条准则:

  Main()函数必须封装在类或结构里来提供可执行程序的入口点。C#采用了完全的面向对象的编程方式,C#中不可以有像C++那样的全局函数。

  Main()函数必须为静态函数(static)。这允许C#不必创建实例对象即可运行程序。

  Main()函数保护级别没有特殊要求, public,protected,private等都可,但一般我们都指定其为public。

  Main()函数名的第一个字母要大写,否则将不具有入口点的语义。C#是大小写敏感的语言。

  Main()函数的参数只有两种参数形式:无参数和string 数组表示的命令行参数,即static

  void Main()或static void Main(string[]args) ,后者接受命令行参数。一个C#程序中只能有一个Main()函数入口点。其他形式的参数不具有入口点语义,C#不推荐通过其他参数形式重载Main()函数,这会引起编译警告。

  Main()函数返回值只能为void(无类型)或int(整数类型)。其他形式的返回值不具有入口点语义。

  在C#中,static变量表示该变量属于类,而不是类的实例。"static"修饰符声明一个静态元素,而该元素属于类型本身而不是指定的对象,可以说是该类的所有实例共享一个static变量。

  在Main方法中调用的成员也必须是静态的,除非建立过相应的实例。

  例如:

  namespace lover_P.Test {

  public class Test {

  public void InstanceMethod() {} // 实例成员(非静态)

  public static void StaticMethod {} // 类型成员(静态)

  public static void Main() {

  InstanceMethod(); // 错误!调用了实例成员,而此时并没有建立实例

  StaticMethod(); // 正确!可以调用静态成员

  Test SomeTest = new Test(); // 建立本类型的一个实例

  SomeTest.InstanceMethod(); // 再在这个实例上调用实例成员就对了

  SomeTest.StaticMethod(); // 附加一句,在实例上调用静态成员也是错误的!

  }

  }

  }

 原文链接:http://net5x.blog.51cto.com/7900145/1568257%20

猜你喜欢

转载自blog.csdn.net/scaped/article/details/79439291
今日推荐