C#的new操作符到底做了什么
c# 什么 到底 New 操作符
2023-09-11 14:16:51 时间
使用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回收
相关文章
- c# 提供的语法糖 汇总
- C#遍历XmlDocument对象所有节点名称、类型、属性(Attribute)
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
- c# 中内部类的简单介绍 C#内部类
- MVC+Spring.NET+NHibernate .NET SSH框架整合 C# 委托异步 和 async /await 两种实现的异步 如何消除点击按钮时周围出现的白线? Linq中 AsQueryable(), AsEnumerable()和ToList()的区别和用法
- C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序
- C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】
- XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
- c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量? c# dynamic动态类型和匿名类 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic 深入浅析C#中的var和dynamic
- SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总
- 浅谈c#的三个高级参数ref out 和Params C#中is与as的区别分析 “登陆”与“登录”有何区别 经典SQL语句大全(绝对的经典)
- C#串口通讯教程 简化一切 只保留核心功能 这可能是最易于理解的一篇教程
- 【卷土重来之C#学习笔记】(二)c#编程概述
- Word控件Spire.Doc 转换教程(一):在 C#、VB.NET 中将 Word Doc 转换为 XML
- c# HttpClient 上传文件并带参
- c# mongo 数组里对象更新
- C#【必备技能篇】Hex文件转bin文件的代码实现
- C#,水仙花数(Narcissistic number)的计算方法及源代码
- 《C#多线程编程实战(原书第2版)》——1.12 处理异常
- 分段线性插值 C#代码
- 玩一下C#的语音识别
- C#位运算符的基本用法
- C#中的 ref 传进出的到底是什么 解惑篇
- 《C#零基础入门之百识百例》(二十六)折半查找 -- 查找指定元素
- 《C#零基础入门之百识百例》(四十九)类成员的作用域和生命期 -- 求N位自幂数
- 用C#自制一个网页服务器
- 在C#中??和?分别是什么意思?
- C#-graphic-中在PictureBox上使用橡皮筋画线
- C#中() =>是什么意思
- C# typeof() 和 GetType()区别是什么?
- C#四种深拷贝方法
- c#类的定义,c#中的关健字,C#标识符
- C#与.NET Framework c#编程语言,和java是一样的。(c#,java) -->javaweb,asp.net