如何在c#中创建对象

时间:2016-12-18 16:14:48

标签: c# object static

我们不能创建一个c#静态类的对象。那么我们如何能够使用静态类的成员呢? 是否有在运行时创建的内存对象?

1 个答案:

答案 0 :(得分:2)

我记得读过一本关于这本书的书,这是我从书中记住的。我认为记住这一点已经足够了。如果我需要了解更多,我会再次阅读它。

GC始终保持指向堆中内存位置的指针,以便它知道在哪里分配下一个对象。这称为下一个对象指针或NOP。

假设你有这个课程

public class Employee
{
    private int empId

    public void Work() 
    {
        // ...
    }
}

以下是实例的外观:

--------------------------  -4 bytes 
|  Object Header Word    |
|------------------------|  +0 bytes <------Object reference is pointed here as well
|  Method Table Pointer  |
|------------------------|  +4 bytes for method tabel pointer
|  Storage for empId     |
|------------------------|  +8 bytes (4 for empId) (12 in total (from -4 to +8))

对象标题字用于许多目的,例如同步,GC,哈希码和完成。

方法表指针是指向内部CLR数据结构的指针,该数据结构简称为方法表或MT。 MT指向另一个名为EEClass的结构。 MT和EEClass一起调用虚方法,接口方法,确定运行时对象的类型等。

哦,最后一点,在64位系统上,对象标题字是8个字节(不是4个字节)。即使你在上面的类中有一个bool而不是int,它仍然会占用12个字节,因为堆中的对象与最接近的4个字节的多个对齐。