问题描述
usingSystem;namespaceProgram{classProgram{intmyint=500;staticvoidMain(){Console.WriteLine("{0,10}",myint);}}}这段代码错在哪里了,提示如标题的错误。
解决方案
解决方案二:
staticintmyint=500;
解决方案三:
usingSystem;namespaceProgram{classProgram{staticintmyint=500;staticvoidMain(){Console.WriteLine("{0,10}",myint);}}}
解决方案四:
static方法要求被调用的数据是staic的,或者你也可以改成这样classProgram{intmyint=500;staticvoidMain(){Console.WriteLine("{0,10}",newProgram().myint);}}
解决方案五:
引用3楼starfd的回复:
static方法要求被调用的数据是staic的,或者你也可以改成这样classProgram{intmyint=500;staticvoidMain(){Console.WriteLine("{0,10}",newProgram().myint);}}
你确定?。。。没有修饰符默认是受保护类型。。。
解决方案六:
谢谢,我买的教材上说如果没有初始化语句,字段的值会被编译器设为默认值,默认值由字段类型决定,但是我用visualstudio编译时却提示错误,无法编译,为什么?
解决方案七:
刚刚发现,如果在方法里声明字段是不会有错的,在类里声明会出错。
解决方案八:
静态方法不可以调非静态全局变量。从内存的角度看,就是当类被加载的时候静态方法和静态属性(全局静态变量)被加载到内存中,就是在内存中开辟一段内存地址用来保存静态方法和静态属性,这时候没有被实例化的类在内存中是不存在的,所以静态方法是不能访问非静态的全局变量。静态方法staticvoidMain()初始化较早,此时intmyint=500;还没有存在,此时使用当然会错。如果staticintmyint;
解决方案九:
如果staticintmyint;此时myint会更早的被加载,在staticvoidMain()中使用当然没有错。如果intmyint在staticvoidMain()里面,在当staticvoidMain()加载的时候会初始化myint,此时使用也没有错。
解决方案十:
引用4楼crystal_lz的回复:
Quote: 引用3楼starfd的回复:
static方法要求被调用的数据是staic的,或者你也可以改成这样classProgram{intmyint=500;staticvoidMain(){Console.WriteLine("{0,10}",newProgram().myint);}}你确定?。。。没有修饰符默认是受保护类型。。。
这是个很有意思的现象,没声明为public,却可以在自身内部通过new自己的一个实例,来访问那些没有public出来的东西