应该有类似c++中的this指针,否则这样的构造函数就有可能出错private string str;public ctor(string str)
{
  str=str //错误
  this.str=str;
  
}
就是说有默认的this

解决方案 »

  1.   

    >>调用C#类的成员函数的时候,编译器有没有插入this指针作为参数(如同C++一样)?
    应该是一样的。>>我想搞到关于C#类实例内存布局的资料,请问
    这个和C++差不多,静态的变量,函数都是和类一起分布,内存只有一个映像。表示状态的变量和对象一起分布,有多个。具体说说,我们讨论讨论。
      

  2.   

    最初我也认为C#和C++一样,compiler会在非静态成员函数中插入this指针,
    后来看到委托delegate,觉得可能和C++有些不同:
    ex: 
        delegate void MyDelegate();
    class CFoo1
    {
    public void foo();
    }class CFoo2
    {
    public void foo();
    }class MainClass
    {
    static void Main()
    {   
      MyDelegate myD;
      CFoo1 foo1 = new CFoo1();
      CFoo2 foo2 = new CFoo2();  
      myD += new MyDelegate(foo1.foo);
      myD += new MyDelegate(foo2.foo);
      myD();
    }
    }
    这里可能有两种情况:
    1,delegate 只是一个简单的函数指针数组,为保证CFoo1::foo和CFoo2::foo的原型相同,
    没有将this指针作为隐含参数,由于C#代码时委托执行的中间代码,运行时平台可能用其它的
    技术实现成员函数的调用;2,delegate是一个带类型参数(模板)的函数指针数组,this指针作为成员函数的隐含参数。
    这些都只能是猜测,关于C#和.Net Framework比较低层的资料太少了,感觉不能把握他,
    还是C++比较好:即优美又公开。
      

  3.   

    看看jeffery richter写的那个.net书的也有会又帮助。
      

  4.   

    >>调用C#类的成员函数的时候,编译器有没有插入this指针作为参数(如同C++一样)?
    没有插入,原因很简单.C++是基于源代码级别的OOPL,也就是说编译后的依然是二进制代码
    而C#是在CRL阶段就支持OOPL的.C#编译后的IL你可以你可以看的到,它是被编译成Assembly
    每个Assembly是自描述,所以不需要.
    >>如果没有,它是怎样实现的。
    matedata 元数据,实现的,因为可以自描述>>我想搞到关于C#类实例内存布局的资料,请问
    哪里有(不是关于C#应用的)?
    内存布局不用考虑,因为GC是自动回收的.所以内存指针不断变化
    因为其是托管环境下的内存使用和普通的物理内存布局不大相同
    要实现物理布局,必须使用相关特性.如:[structlayout]另:如果你想开发底层环境不要用C#,C#是用来开发企业环境的分布式企业资源的分布和整合的.C是用来开发事实环境的应用的.C++更多是来开发图形和图象算法的实现的(开源社区里多为如此).因此太底层的特性不用太多考虑.在这如果考虑使用C#建议多学习有关OOA和OOD方面的知识,否则OOPL!=OOP
      

  5.   

    yarshray(saga jion(心飘情落))受益匪浅:)