问题描述
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespace结构体{classProgram{///<summary>///定义了一个结构体a///</summary>structa{publicstringfirstName,lastName;publica(strings1,strings2){firstName=s1;lastName=s2;}publicstringName(){returnfirstName+""+lastName;}};//25行staticvoidMain(string[]args){aaa=newa("zhangsan","lisi");//请问为什么这行语句放在25行就错了!Console.WriteLine(aa.firstName);Console.WriteLine(aa.Name());}}}/*在VisualStudio2005中的输出结果是:---------------zhangsanzhangsanlisi请按任意键继续...---------------*/
解决方案
解决方案二:
aaa=newa("zhangsan","lisi");//请问为什么这行语句放在25行就错了!staticvoidMain(string[]args){//Console.WriteLine(aa.firstName);//Console.WriteLine(aa.Name());}
请问为什么这行语句放在25行就错了!本身没错。不过在Console.WriteLine(aa.firstName);的时候,classProgram还没有实例化,它的成员aa你当然没有办法访问。
解决方案三:
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespace结构体{classProgram{///<summary>///定义了一个结构体a///</summary>staticstructa{publicstringfirstName,lastName;publica(strings1,strings2){firstName=s1;lastName=s2;}publicstringName(){returnfirstName+""+lastName;}};//25行staicaaa=newa("zhangsan","lisi");staticvoidMain(string[]args){Console.WriteLine(aa.firstName);Console.WriteLine(aa.Name());}}}因为你的mian函数时静态的方法我操每颜色了
解决方案四:
up,1,2楼,我的也是黑白的
解决方案五:
好像是在哀悼震灾
解决方案六:
我感觉你的疑问主要是你对静态方法与实例方法不太理解,你可以查一下Msdn,静态类是加载包含此类的程序或者命名空间时自动加载的,而静态方法是在第一次被调用前和任何静态构造函数被调用前加载,而实例方法或者实例成员是在被生成实例时加载的。如果你理解了上面的我所说的那一段话,你再看看你的程序为什么放到25行就会出错的原因了。出错原因:如果你把aa的声明放到25号,你可以看看,aa是一个实例成员,而main方法是一个静态成员。那好,根据上面的那段话,可以看出在程序执行main前需要把main方法加载到内存中,而aa是一个实例成员需要在声明Program实例时才被加载,那么在.net执行main方法前就无法知道aa所需的内存空间,所以会出错。另外,估计你在学习C#时也了解到,在静态方法中只能调用静态成员。希望以上对你有所帮助。
解决方案七:
先谢谢诸位了我在看看!