C#系列之构造、析构、垃圾回收

目录

1.构造函数

2.构造函数的特殊写法

3.析构函数(了解即可)

4.垃圾回收机制


1.构造函数

基本概念:在实例化对象时会调用的用于初始化的函数,如果不写,默认存在一个无参构造函数。构造函数的写法:没有返回值,函数名与类名必须相同,没有特殊需求时,一般是public的。

构造函数可以被重载,this代表当前调用该函数的对象自己。

注意:如果不自己实现无参构造函数而实现了有参构造函数,会失去默认的无参构造。

class Person
{
     public string name;
     public int age;
     //类中是允许自己声明无参构造函数的
     //结构体是不允许的
     public Person()
     {
       name="Nicole Potter";
       age=19;
     }
}

2.构造函数的特殊写法

使用this指自己的参数

public Person (int age,string name)
{
    this.age=age;
    this.name=name;
}

public Person(string name)
{
    this.name=name;
}
public Person(int age,string name):this(name)
{
    Console.WriteLine("Person两个参数构造函数调用");
}
//在函数后面添加this(),即调用函数,若里面没有,则为无参函数调用。若里面有name,则调用上面传入name的函数。
//无参函数没有传入参数,后面也可以用this(),也是调用,(但是不能调用无参函数)
//如下,18是int类型,就是调用传入类型为int的函数
public Person():this(18)
{
name="Nicole Potter";
age=19;
}
//传入的参数可以不必等于原函数中的参数,如上图18!=19.即结果只要是int类型都可以调用int类型的函数。

3.析构函数(了解即可)

当引用类型的堆内存被回收时会用到该函数,对于一些需要手动处理内存的语言如C++,需要在析构函数中做一些回收处理。但是C#中存在自动垃圾回收机制GC,所以我们几乎不会怎么使用析构函数,除非,你想要在某一对象被垃圾回收时,做一些特殊的处理。

注意:在Unity开发中析构函数几乎不会被使用。

基本语法

~类名()

{

}

//当引用类型的堆内存被回收时

//析构函数是当垃圾真正被回收的时候才会调用的函数。

当它变成垃圾的时候还不会调用,只有当垃圾回收时才会调用。

析构函数与构造函数相反,当对象结束生命周期,如对象所在的函数已经调用完毕时,系统往往用来做“清理善后”的工作(例如在建立对象时用new开辟一片内存空间,delete会自动调用析构函数后释放内存)。

4.垃圾回收机制

当0代内存满了时,没有分配空间时开始触发垃圾回收机制,开始寻找没有引用的对象,如果有引用则被认为是可达对象,如果没有引用,则被认为是不可达对象,不可达对象就会被认为是垃圾。然后把没有引用的内存全部释放清空。
然后,把0代中有引用的转移到1代内存中,他们可能不是连续的,中间有很多空位。然后修改引用地址,使他们连续起来。
当1代满了的时候,1代会和0代一起释放,再把有引用的放在2代里面。只有当每一代满了的时候才会触发垃圾回收机制!0代和1代触发的速度会比2代快很多,因为2代里面有很多储存,每一代触发垃圾回收机制都会触发迁移。若2代也满了,就会0.1.2代一起释放。占用较大的对象会放在2代,目的是提升性能,因为触发使用CPU计算消耗时间。默认分配是从0代开始的。(GC触发耗时,影响玩家体验),我们可以使用手动触发。
GC是系统提供的专门用来垃圾回收的类。

注意:

GC指负责堆内存(Heap)的垃圾回收,引用类型都是存在堆内存的,所以它的分配和释放都是通过垃圾回收机制来管理。

栈内存是由系统自动管理的,值类型在栈中分配内存,他们有自己的生命周期,不用对他们进行管理,他们会自动分配和释放。

⚡如何手动回收?

手动触发垃圾回收机制的方法:

GC.Collect();

一般情况下,我们不会频繁调用,都是在loading过场景时才调用。
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
      本套C#语言教程,全部采用案例化教学模式。结合C#知识点在实际游戏中具体的应用场景,让初级学员快速、深入的学好C#语言,为进一步全面、高效的学习Unity游戏引擎,制作精良的游戏产品,打下坚实的语言基础!       真正学好Unity,其先决条件是一定要有稳固、扎实的编程基础!因此目前绝大多数(线下)Unity培训机构(一般4-5个月)都会先给学员讲解C# for Unity 的编程加强课程。(一般高校的编程课程内容少、不深入...)        本套《C# for Unity》课程共分为“入门篇”、“基础篇”、“中级篇”、“进阶篇”,分别对应于完全“零”编程基础、较少编程基础、需要强化C#编程、需要深入学习C#脚本,等各类型学员群体。      说明:  本课程使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习影响不大) 一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nicole Potter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值