一、new 操作符所执行的工作
1. 从托管堆(managed heap)中分配指定类型所需数量的字节来作为存储其对象的内存空间。
2. 初始化对象的附加成员(overhead members)。每个对象实例都有两个附加成员。其一,指向类型方法表的指针,第二个成员为SyncBlockIndex. CLR使用这俩个成员来管理对象实例。
3. 传人new操作符中指定的参数, 调用类型的实例构造器。
二、类型安全总结
class B
{
int x;
}
class D: B
{
int y;
}
语句 | OK | CTE (compilation time error) | RTE(Run time error) |
System.Object o1 = new System.Object(); | √ | ||
System.Object o2 = new B(); | √ | ||
System.Object o3 = new D(); | √ | ||
System.Object o4 = o3; | √ | ||
B b1 = new B(); | √ | ||
B b2 = new D(); | √ | ||
D d1 = new D(); | √ | ||
B b3 = new System.Object(); | √ | ||
D d3 = new System.Object(); | √ | ||
B b4 = d1; | √ | ||
D d2 = b2; | √ | ||
D d4 = (D)d1; | √ | ||
D d5 = (D)b2 | √ | ||
D d6 = (D)b1; | √ | ||
B b5 = (B)o1; | √ | ||
B b6 = (D)b2; | √ |