这篇文章介绍了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(){}
}
虽然创建了子类Dog的实例,但通过dog实例能调用"老祖宗"System.Object的实例方法,也能获取到父类的公共属性Age的值,并且所有的实例字段值为其类型的默认值。
new操作符做的事情大致包括:
- 计算Dog类以及所有父类实例字段所占的字节数
- 计算Dog类以及所有父类"类型对象指针"和"同步块索引"所占的字节数
- 根据字节数,托管堆分配内存
- 先调用所有父类的构造函数,最后调用Dog的构造函数。在这过程中,初始化所有实例字段,字段值为字段类型的默认值或构造函数实参值;初始化"类型对象指针"和"同步块索引"成员
- 把新建的Dog实例的堆地址赋值给栈变量dog
- 通过new创建的托管堆对象最终由GC回收
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对得得之家的支持。如果你想了解更多相关内容请查看下面相关链接
织梦狗教程
本文标题为:C#中new操作符的工作机制


基础教程推荐
猜你喜欢
- C#获取指定目录下某种格式文件集并备份到指定文件夹 2023-05-30
- c# – USING块在网站与Windows窗体中的行为不同 2023-09-20
- C#调用摄像头实现拍照功能的示例代码 2023-03-09
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16
- Unity 如何获取鼠标停留位置下的物体 2023-04-10
- 实例详解C#实现http不同方法的请求 2022-12-26
- C#中 Json 序列化去掉null值的方法 2022-11-18
- Unity shader实现高斯模糊效果 2023-01-16
- C#中的Linq to JSON操作详解 2023-06-08
- C# 解析XML和反序列化的示例 2023-04-14