阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

简单介绍C#中new操作符的工作机制

33次阅读
没有评论

共计 859 个字符,预计需要花费 3 分钟才能阅读完成。

导读 这篇文章介绍了 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(){}
}

简单介绍 C# 中 new 操作符的工作机制

虽然创建了子类 Dog 的实例,但通过 dog 实例能调用 ” 老祖宗 ”System.Object 的实例方法,也能获取到父类的公共属性 Age 的值,并且所有的实例字段值为其类型的默认值。

new 操作符做的事情大致包括:
  • 计算 Dog 类以及所有父类实例字段所占的字节数
  • 计算 Dog 类以及所有父类 ” 类型对象指针 ” 和 ” 同步块索引 ” 所占的字节数
  • 根据字节数,托管堆分配内存
  • 先调用所有父类的构造函数,最后调用 Dog 的构造函数。在这过程中,初始化所有实例字段,字段值为字段类型的默认值或构造函数实参值;初始化 ” 类型对象指针 ” 和 ” 同步块索引 ” 成员
  • 把新建的 Dog 实例的堆地址赋值给栈变量 dog
  • 通过 new 创建的托管堆对象最终由 GC 回收
  • 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值

    阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

    腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

    代金券:在阿里云专用满减优惠券

    正文完
    星哥说事-微信公众号
    post-qrcode
     0
    星锅
    版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计859字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
    阿里云-最新活动爆款每日限量供应
    评论(没有评论)
    验证码
    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中