改成
string name ;
        public TestClass()
        {
name = "yhc";
            Console.WriteLine("TestClass构造函数");
        }
就是你想要的结果了

解决方案 »

  1.   

    构造函数仅仅是一个方法,不是构造类的函数
    构造类是你new的时候构造出来的,而不是执行到构造函数才去构造一个类.
      

  2.   

    我理解你的意思,但是IL的.ctor就是构造函数呀,而且为name赋值的确写在这里面呀
    而且我再写一个有参数的构造函数(如下)
    public TestClass(int a)
            {
                Console.WriteLine("TestClass1构造函数");
            }
    再IL中的确能看到两个.ctor
      

  3.   

    new一个对象的时候,就是分配内存和执行构造函数的过程。类的成员先于构造函数被创建,然后才执行构造函数。
      

  4.   

    这... 楼主你还是先把c#基础打好, 别动不动就来个IL代码,这样不会显得多高大上.我觉得你把栈和堆先分清楚,比学会il指令要好.
      

  5.   

     IL_000c:  call       instance void [mscorlib]System.Object::.ctor()
    这个才是构造函数
    前面的.ctor是实例化类
      

  6.   

    new的含义:先计算创建对象的内存开销,字段初始默认值,Object::ctor()这里才去从顶级父类object一层一层调用构造初始化实例字段(无代码操作,无动作),即使根据IL代码,name的值初始也在构造之前。
      

  7.   

    楼主根本就是胡言乱语了...
    ...此时name居然有值为yhc,理论断点位置此时构造函数还没有执行,name的值不是我想象中的null....
    构造函数没执行name又哪来的null值? 你想象未免也太没有理论依据了.真正就成了"凭空想象"..建议你还是先弄清楚概念吧....
      

  8.   

    你不知道任何字段子执行构造函数之前都会被初始化为0或者null的吗
      

  9.   

    你不知道任何字段子执行构造函数之前都会被初始化为0或者null的吗你不知道任何字段子执行构造函数之前都会被初始化为0或者null的吗是之前吗?那么构造函数又是干什么用的? 麻烦你先弄清楚真实顺序..再来问这种"顺序的疑惑"好吗?
      

  10.   

    所以呀,按照你的说法,name的值更不应该是"yhc"了呀
      

  11.   

    看十楼的吧,,.ctor就是构造函数,不是什么实例化类。。你也说了“instance void [mscorlib]System.Object::.ctor()”是构造函数,可是这是调用父类object的构造函数,说明.ctor就是构造函数
      

  12.   

    你不知道任何字段子执行构造函数之前都会被初始化为0或者null的吗你不知道任何字段子执行构造函数之前都会被初始化为0或者null的吗是之前吗?那么构造函数又是干什么用的? 麻烦你先弄清楚真实顺序..再来问这种"顺序的疑惑"好吗?
    呵呵,你自己去多看看书吧,我说的原理和执行顺序都没有问题,至于答案就是10楼的答案
      

  13.   

    string name = "yhc";
    这句话在定义name的时候就赋值
    所以你不管在哪里设置断点,要么找不到变量name(还没有创建变量),要么name就已经有值了
    任何语言(JAVA,C++,C#,VB)这样写法,编译器都不可能先定义好变量,然后跑到别的地方给它赋值
      

  14.   

    在代码“public TestClass()”处设置断点
    ---------
    你没法把断点设置在内部调用的地方,因为已经封装了
    你设置的断点其实是设置在"自身内部的代码"里,所以执行到这一步,前面已经都执行完了
      

  15.   

    楼主的问题和所谓的构造函数的执行顺序根本就没什么关系..这分明就是该字段声明的时候就有初始值"yhc"了..构造函数是对没有值的字段进行初始化..有值的字段不管...所以说..还是概念问题...
      

  16.   

    你不知道任何字段子执行构造函数之前都会被初始化为0或者null的吗你不知道任何字段子执行构造函数之前都会被初始化为0或者null的吗是之前吗?那么构造函数又是干什么用的? 麻烦你先弄清楚真实顺序..再来问这种"顺序的疑惑"好吗?
    呵呵,你自己去多看看书吧,我说的原理和执行顺序都没有问题,至于答案就是10楼的答案最后我说一句..朋友.这是.net 不是c++..c#是在构造函数里进行初始化的..你的原理和顺序都没有问题?那怪微软咯?
      

  17.   

    算了,我举个例子吧
     string name = "yhc";
             public TestClass()
             {
                 name = "wq";
                 Console.WriteLine("TestClass构造函数");
             }
    “构造函数的执行顺序是:先初始化字段,再执行父类的构造函数,再执行自身内部的代码”这句话是我说的,我想你误解我的“初始化字段”这几个字了,我了解的构造函数原理大概如下: 在创建一个引用类型的对象时,调用类型的实例构造函数之前,会将对象分配的内存做清零处理,就是说所有字段都将设置为0或null,如果我的字段name在构造函数外部声明的时候就赋了值“yhc”,那么这个赋值操作实际上并不是这个时候做的,而是在构造函数里面做的,而这个操作就是我说的“初始化字段”,我可能用“初始化字段”这样的表达不太好,然后再调用父类的构造函数,然后再“执行自身内部的代码”就是我们这里的“name = "wq";Console.WriteLine("TestClass构造函数");”
    如果不对,请多多指教
      

  18.   

    问题就是你没法把断点打到"初始化字段"的地方,因为那是内部封装好的方法,不会开放给你随便改,你理解成DLL就行了
    你打断点的地方,其实已经执行到最后一步了,所以从断点看值,根本看不出执行过程,只能看到执行结果