改成
string name ;
public TestClass()
{
name = "yhc";
Console.WriteLine("TestClass构造函数");
}
就是你想要的结果了
string name ;
public TestClass()
{
name = "yhc";
Console.WriteLine("TestClass构造函数");
}
就是你想要的结果了
解决方案 »
- C# combobox 选项更改后,获取新的数据库内容传递给textbox
- 我的第一个winform计算器小程序... ...
- C#中,如何判断一个字符串是中文还是字母?
- 怎样让程序形成继承、封装、多态。怎样来添加继承???
- 急,如何弹出可以填写文字并获得返回的模式对话框?谢谢
- 关于Enter和Esc在模态对话中的应用!
- GetShortPathName的返回值问题
- 请指教:DataView过滤表达式中数据类型的转换
- C#如何判断文件下载是否成功
- 各位兄台:我做了一个c#的界面.里面有一个open项,是打开文件的,但是我打开了一个文件对话框后....就...
- 新人求助,如何获取devexpress pictureEdit的图片类型?
- 串口问题,串口是打开的状态,但IsOpen属性显示的是fales,可能哪个地方出现问题?
构造类是你new的时候构造出来的,而不是执行到构造函数才去构造一个类.
而且我再写一个有参数的构造函数(如下)
public TestClass(int a)
{
Console.WriteLine("TestClass1构造函数");
}
再IL中的确能看到两个.ctor
这个才是构造函数
前面的.ctor是实例化类
...此时name居然有值为yhc,理论断点位置此时构造函数还没有执行,name的值不是我想象中的null....
构造函数没执行name又哪来的null值? 你想象未免也太没有理论依据了.真正就成了"凭空想象"..建议你还是先弄清楚概念吧....
呵呵,你自己去多看看书吧,我说的原理和执行顺序都没有问题,至于答案就是10楼的答案
这句话在定义name的时候就赋值
所以你不管在哪里设置断点,要么找不到变量name(还没有创建变量),要么name就已经有值了
任何语言(JAVA,C++,C#,VB)这样写法,编译器都不可能先定义好变量,然后跑到别的地方给它赋值
---------
你没法把断点设置在内部调用的地方,因为已经封装了
你设置的断点其实是设置在"自身内部的代码"里,所以执行到这一步,前面已经都执行完了
呵呵,你自己去多看看书吧,我说的原理和执行顺序都没有问题,至于答案就是10楼的答案最后我说一句..朋友.这是.net 不是c++..c#是在构造函数里进行初始化的..你的原理和顺序都没有问题?那怪微软咯?
string name = "yhc";
public TestClass()
{
name = "wq";
Console.WriteLine("TestClass构造函数");
}
“构造函数的执行顺序是:先初始化字段,再执行父类的构造函数,再执行自身内部的代码”这句话是我说的,我想你误解我的“初始化字段”这几个字了,我了解的构造函数原理大概如下: 在创建一个引用类型的对象时,调用类型的实例构造函数之前,会将对象分配的内存做清零处理,就是说所有字段都将设置为0或null,如果我的字段name在构造函数外部声明的时候就赋了值“yhc”,那么这个赋值操作实际上并不是这个时候做的,而是在构造函数里面做的,而这个操作就是我说的“初始化字段”,我可能用“初始化字段”这样的表达不太好,然后再调用父类的构造函数,然后再“执行自身内部的代码”就是我们这里的“name = "wq";Console.WriteLine("TestClass构造函数");”
如果不对,请多多指教
你打断点的地方,其实已经执行到最后一步了,所以从断点看值,根本看不出执行过程,只能看到执行结果