软件编程
位置:首页>> 软件编程>> C#编程>> C#中new操作符的工作机制

C#中new操作符的工作机制

作者:Darren  发布时间:2023-12-08 13:57:20 

标签:C#,new,操作符

使用new操作符来创建对象,其背后到底发生了什么?

有一个父类Animal,Dog派生于Animal。

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(){}
   }

C#中new操作符的工作机制

虽然创建了子类Dog的实例,但通过dog实例能调用"老祖宗"System.Object的实例方法,也能获取到父类的公共属性Age的值,并且所有的实例字段值为其类型的默认值。

new操作符做的事情大致包括:

  • 计算Dog类以及所有父类实例字段所占的字节数

  • 计算Dog类以及所有父类"类型对象指针"和"同步块索引"所占的字节数

  • 根据字节数,托管堆分配内存

  • 先调用所有父类的构造函数,最后调用Dog的构造函数。在这过程中,初始化所有实例字段,字段值为字段类型的默认值或构造函数实参值;初始化"类型对象指针"和"同步块索引"成员

  • 把新建的Dog实例的堆地址赋值给栈变量dog

  • 通过new创建的托管堆对象最终由GC回收

来源:https://www.cnblogs.com/darrenji/p/3994138.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com