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(){}
}
虽然创建了子类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