大家都知道方法分对象的方法和静态方法。
但是我有个疑问是,当生成对象时,会分配内存空间存储对象的相关属性,会不会分配空间存储方法呢,是不是每个对象调用自己的方法,还是方法在另一内存块,所有对象去调用它呢。
当我们序列化一个对象到XMl文件中时,只会看到对象所包含的属性。
我的理解是,对象调用另一代码块的方法,调用时方法会判断它作用于哪个对象。
不知道对不对,希望高手指点

解决方案 »

  1.   

    对象的方法是代码,通常是独立作为代码段存储的。
    对对象的调用通常是附加一个隐含的this来进行函数调用。
    不过,对于C#这样的语言,代码是中间码IL,在运行时动态翻译成机器指令,但是原理是一样的。
    可以肯定地说:一个类的方法肯定只能有一处翻译好的代码,而不会出现代码也拷贝的现象。
      

  2.   

    SomeClass c = new SomeClass;c实际就是个指针(或者精确点叫做tracking pointer)
    指针c实际指向了另一个指针mt,mt指向的东西就是该对象的method table。mt之前是一个4 bytes的sync block,用于加锁、哈希缓存等。mt之后是该对象的fields。
    对照这个图来理解:
      

  3.   

    左边是引用型对象的布局
    右边是struct的布局