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

 更新时间:2022年08月27日 14:13:30   作者:Darren Ji  
这篇文章介绍了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回收

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • Unity3D实现射线使物体移动

    Unity3D实现射线使物体移动

    这篇文章主要为大家详细介绍了Unity3D实现射线使物体移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • C#实现给DevExpress中GridView表格指定列添加进度条

    C#实现给DevExpress中GridView表格指定列添加进度条

    这篇文章主要为大家详细介绍了如何利用C#实现给DevExpress中GridView表格指定列添加进度条显示效果,感兴趣的小伙伴可以尝试一下
    2022-06-06
  • C# 向二进制文件进行读写的操作方法

    C# 向二进制文件进行读写的操作方法

    该例子使用 BinaryStream 和 BinaryWriter 对二进制文件进行读写操作先上代码再根据我理解的所分享给各位朋友
    2013-04-04
  • C#波形图控件制作示例程序

    C#波形图控件制作示例程序

    这篇文章主要介绍了C#波形图控件的制作方法,大家参考使用
    2013-11-11
  • C#字符集编码的使用及说明

    C#字符集编码的使用及说明

    这篇文章主要介绍了C#字符集编码的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 基于C#实现XML文件读取工具类

    基于C#实现XML文件读取工具类

    这篇文章主要介绍了基于C#实现XML文件读取工具类,涉及C#针对XML文件各节点获取的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 使用策略模式实现报警服务示例详解(短信报警)

    使用策略模式实现报警服务示例详解(短信报警)

    服务的功能:这个服务就是能够实现多通路报警的服务,比如邮件报警、客户端报警、短信报警等,该服务灵活性还不错,比较方便扩展
    2014-01-01
  • C# lambda表达式原理定义及实例详解

    C# lambda表达式原理定义及实例详解

    这篇文章主要介绍了C# lambda表达式原理定义及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • WPF实现背景灯光随鼠标闪动效果

    WPF实现背景灯光随鼠标闪动效果

    这篇文章主要为大家详细介绍了WPF实现背景灯光随鼠标闪动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • C#中的multipart/form-data提交文件和参数

    C#中的multipart/form-data提交文件和参数

    这篇文章主要介绍了C#中的multipart/form-data提交文件和参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论