C#的new操作符到底做了什么
2014-09-26 09:12
281 查看
使用new操作符来创建对象,其背后到底发生了什么?有一个父类Animal,Dog派生于Animal。
虽然创建了子类Dog的实例,但通过dog实例能调用"老祖宗"System.Object的实例方法,也能获取到父类的公共属性Age的值,并且所有的实例字段值为其类型的默认值。new操作符做的事情大致包括:→计算Dog类以及所有父类实例字段所占的字节数→计算Dog类以及所有父类"类型对象指针"和"同步块索引"所占的字节数→根据字节数,托管堆分配内存→先调用所有父类的构造函数,最后调用Dog的构造函数。在这过程中,初始化所有实例字段,字段值为字段类型的默认值或构造函数实参值;初始化"类型对象指针"和"同步块索引"成员→把新建的Dog实例的堆地址赋值给栈变量dog→通过new创建的托管堆对象最终由GC回收
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
Console.WriteLine("我能调用老祖宗Object的实例方法GetType,显示结果为:" + dog.GetType() );
Console.WriteLine("我能拿到父类的属性Age=" + dog.Age);
Console.WriteLine("我当然能拿到自己的公共字段_weight=" + dog._weight);
}
}
public class Animal
{
public int Age { get; set; }
public Animal(){}
}
public class Dog : Animal
{
public decimal _weight;
public Dog(){}
}
![](http://images.cnitblog.com/blog/417212/201409/260912095769049.png)
相关文章推荐
- c# 使用 new 操作符构造新对象中做了一些什么 (简单版)
- CLR via C# 读书笔记(二)new 操作符都干了些什么?
- c#中new、Override到底是什么区别
- C#参数传递时到底发生了什么
- C# java中调用参数到底有什么实用的地方
- C#中virtual,override,new的区别是什么
- new 一个对象到底做了什么?
- c#中using 和new有什么意义?
- 永远神话——C#/C/C++到底还能做什么?
- new到底做了什么?
- C#参数传递时到底发生了什么(ref)
- Class a=new Class(){a=b,c=d}。C#语言什么意思 主要是实例化后怎么有大括号从来没这么用过。
- 请问C#中get和SET到底是什么意思啊?
- 作为一个C#程序员,你到底能够达到什么级别?测试一下吧
- 【C#】New操作符所做的事情
- C# 事件到底是什么
- 永远神话——C#/C/C++到底还能做什么?
- C#中引用类型做方法参数时,加ref或out,与不加ref或out到底有什么区别?
- 我想用asp编写一个网站,我现在才刚开始学C#和SQL以及HTML。谁能详细地告诉我为了组建一个网站,它们之间到底有什么联系?是怎么联系的?比如,怎么样就能用C#调取数据库,而HTML又是怎么和C#联
- new到底new出了什么