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

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

使用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

标签:C#,new,操作符
0
投稿

猜你喜欢

  • 通俗易通讲解Android蓝牙键值适配

    2022-06-19 07:50:34
  • Android异步方法以同步方式实现

    2022-11-05 15:13:50
  • C#几种截取字符串的方法小结

    2023-07-16 09:55:10
  • 教你3分钟了解Android 简易时间轴的实现方法

    2023-04-02 20:56:19
  • c# 读取XML文件的示例

    2023-11-04 00:51:17
  • Mybatis拦截器的实现介绍

    2023-07-04 04:23:31
  • 拉钩网java笔试题分享

    2022-02-13 08:48:25
  • Android实现登录界面记住密码的存储

    2022-11-29 04:55:44
  • c#实现多线程局域网聊天系统

    2022-12-01 23:34:25
  • Java的Socket网络编程基础知识入门教程

    2021-11-19 10:10:37
  • java 反射调用Service导致Spring注入Dao失效的解决方案

    2021-06-30 15:47:58
  • 详解DES加密算法的原理与Java实现

    2021-06-22 06:56:19
  • 使用Android造了个滚轮控件轮子示例

    2023-04-29 07:09:17
  • C#基于socket模拟http请求的方法

    2022-09-12 09:55:11
  • Android中使用Bitmap类将矩形图片转为圆形的方法

    2022-01-04 18:47:40
  • Spring Boot整合Swagger测试api构建全纪录

    2022-10-21 09:05:25
  • 实例讲述Java IO文件复制

    2023-01-30 17:25:32
  • Java中instanceof关键字的用法总结

    2022-12-11 15:52:27
  • Java算法实战之排一亿个随机数

    2022-11-22 02:47:26
  • 解决JAVA非对称加密不同系统加密结果不一致的问题

    2022-02-13 06:43:56
  • asp之家 软件编程 m.aspxhome.com