您的位置:首页 > 编程语言 > C#

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

2018-03-04 20:26 162 查看
假设没有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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C#