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
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#重载运算符必须静态吗? 为什么必须是静态的?
- 为什么类中的线程函数必须要声明静态?
- 静态函数 静态数据成员与静态成员函数 为什么虚函数必须是非静态成员函数 构造函数能为static吗?
- 类中的线程函数为什么必须是静态的
- 为什么类中的线程函数必须要声明静态?
- 为什么类中的线程函数必须要声明静态?
- 在java中为什么main方法必须是静态的解释
- 为什么内联函数,构造函数,静态成员函数不能为virtual函数
- 为什么在C++使用pthread_create()的时候,类成员函数做线程的处理函数必须要定义成static类型的?
- 为什么c++中,有时可以用类名直接访问非静态成员函数?
- Win32多线程 线程函数必须为静态的解决方案
- java中的main方法,为什么是静态(static)的?
- 为什么内联函数,构造函数,静态成员函数不能为virtual函数
- java主方法main()方法为什么要必须是静态static的?
- 为什么VB.net的Shared(共享)方法在C#中叫Static(静态)?(http://zhenyulu.cnblogs.com/articles/385047.html)
- 为什么内联函数,构造函数,静态成员函数不能为virtual函数
- c# 可以有多个Main()函数
- 为什么静态成员函数不能是const