问题描述
一个类classAnima{privatestringname="";publicAnima(stringname){this.name=name;}}实例化这个类Animaan=newAnima("a")//在这里下断点F9按F5,起动,再按一次F11此时把鼠标移动到这句的name上时privatestringname="";可以发现,name的值为a了;同时publicAnima(stringname)句中的name的值也为a;最后我把publicAnima(stringname)句改成publicAnima(stringName)再进行调试,发现运行到privatestringname="";时,name变为了null,运行离开这步时值为""(正确);以上这样的现象是怎么回事呢,听听大家的说法?
解决方案
解决方案二:
你不知道.c#区分大小写吗?建议你去看一下,c#基础篇,看看命名规则.
解决方案三:
最后我把publicAnima(stringname)句改成publicAnima(stringName)this.name=name;
解决方案四:
引用楼主linxiaofeng0816的帖子:
name变为了null,运行离开这步时值为""(正确);
正確嗎?
解决方案五:
看样子,大家还没有明白我说的意思,最好请大家动手逐行调试看看结果最先的类是这样子的:classAnima{1privatestringname="";2publicAnima(stringname)3{4this.name=name;5}}实例化一个类:Animaan=newAnima("a")//按F9请在这里下断点按F5运行,按F11,程序运行到第1句:这时privatestringname="a"(按常规这是应该是name=null);按F11程序运行到第2句:这时privatestringname="a"(按常规这是应该是name="");按F11->第3句按F11->第4句,给这privatestringname赋值为a(按常规这是应该是name="a");
解决方案六:
为改成classAnima{1privatestringname="";2publicAnima(stringName)3{4this.name=Name;5}}只是为了应征一下在字段与构造方法中参数不一致时的情况,请大家不要误会
解决方案七:
为改成classAnima{1privatestringname="";2publicAnima(stringName)3{4this.name=Name;5}}只是为了应征一下在字段与构造方法中参数名称不一致时的情况,请大家不要误会
解决方案八:
呵呵。。
解决方案九:
引用3楼gen06的回复:
引用楼主linxiaofeng0816的帖子:name变为了null,运行离开这步时值为""(正确);正確嗎?
在没有赋值之前name的值不是""而是null
解决方案十:
是由于调用了构造函数
解决方案十一:
哈哈```愚人愚己
解决方案十二:
引用9楼virusplayer的回复:
是由于调用了构造函数
不对,我看了一下逐行运行情况,类的初始化是在对字段检查运行完了后在运行的构造函数进行相关的操作
解决方案十三:
那是由于字段name与参数name所指地址相同,你看到的其实是参数name的值,你可以这样试一下:publicclassAnima{stringname="";publicAmina(stringname){this.name="b";}}
断点来stringname="";时,看到name是等于"a"的。所以并不是“还没运行到this.name=name;就已经赋值。”
解决方案十四:
stringname="";publicAmina(stringname)name他们的作用域是一样的,也就是一个变量
解决方案十五:
聪明的编译器
解决方案:
引用4楼linxiaofeng0816的回复:
看样子,大家还没有明白我说的意思,最好请大家动手逐行调试看看结果最先的类是这样子的:classAnima{1privatestringname="";2publicAnima(stringname)3{4this.name=name;5}}实例化一个类:Animaan=newAnima("a")//按F9请在这里下断点按F5运行,按F11,程序运行到第1句:这时privatestringname="a"(…
你监视的不对,应该监视this.nameprivatestringname="";publicAnima(stringname){this.name=name;}编译器帮你更改为:privatestringname;//所以当你把鼠标移到此行的name上时,等于查看参数name,更改名字可避免这个问题publicAnima(stringname){this.name="";this.name=name;}正确监视应该是监视this.name