构造,析构,垃圾回收
构造函数
在实例化对象时会调用的用于初始化的函数,如果不写则默认存在一个无参构造函数
构造函数没有返回值,函数名和类名必须相同
构造函数可以重载
如果自己不是实现无参构造函数就实现了有参构造函数的话,就会失去默认的无参构造函数
class Person
{
public string name;
public int age;
//类中允许自己申明无参构造函数,但是结构体中不允许
public Person()
{
name="robot"
age=1;
}
//构造函数可以重载
public Person(int age)
{
//this代表当前调用该函数的对象本身
this.age=age;
}
public Person(int age,string name)
{
this.age=age;
this.name=name;
}
}
Person p1 = new Person(10,"Machine");
构造函数的特殊写法
可以通过this
重用构造函数代码
//想复用什么构造函数就在this()里面的填入相应类型的参数
public Person(int age,string name):this(i)
{
//会先调用public Person(int age)这个构造函数
this.name=name;
}
析构函数
基本语法
//析构函数是垃圾被回收的时候才会调用的函数
//~类名()
//{
//}
~Person()
{
}
垃圾回收机制
堆(Heap),栈(Stack)
遍历堆上动态分配的所有对象,来确认哪些对象是垃圾,垃圾就是没有被任何变量、对象引用的内容
垃圾回收有很多算法
Garbage Collecetion只负责堆内存的垃圾回收
引用类型都是存在堆中的,所以引用类型的分配和释放都通过垃圾回收机制来管理
而栈上的内存由系统自动管理
值类型在栈中分配内存,值类型有自己的生命周期,不用对它们进行管理
C#中内存回收机制的大概原理
小型的都会先储存在0代内存中,而在0代内存装满后就会触发0代内存的垃圾回收机制,把无法达到的内存释放,并把0代内存中的内容压缩搬迁到1代内存中,1代内存到2代内存也是如此,不过1代内存在触发垃圾回收机制的时候也回触发0代内存的垃圾回收机制。而且大对象总是被直接认为存进二代内存,目的是减少性能损耗,不会对大对象进行搬迁压缩,85000字节(83kb)以上的对象为大对象,0代和1代内存的存储速度比二代更快
手动触发GC
一般情况下不会频繁调用
一般都是在Loading读条的时候调用
GC.Collect();
习题
using System.Security.Cryptography.X509Certificates;
namespace 类和对象习题
{
class Ticket
{
public uint distance;
public float price;
public Ticket(uint distance)
{
this.distance = distance;
this.price = GetPrice(distance);
}
float GetPrice(uint distance)
{
float price;
if (distance <=100)
{
return price=distance;
}
else if(distance > 100 && distance <= 200)
{
return price = distance * 0.95f;
}
else if (distance > 200 && distance <= 300)
{
return price = distance * 0.9f;
}
else
{
return price = distance * 0.8f;
}
}
public void GetInfo()
{
Console.WriteLine("{0}公里的价格是{1}",distance,price);
}
}
internal class Program
{
static void Main(string[] args)
{
Ticket ticket=new Ticket(301);
ticket.GetInfo();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)