当前位置: 首页 > news >正文

C#基础——构造函数、析构函数

C#基础——构造函数、析构函数

1、构造函数

构造函数是一种特殊的方法,用于在创建类的实例时进行初始化操作。构造函数与类同名,并且没有返回类型。

构造函数在对象创建时自动调用,可以用来设置对象的初始状态、分配内存、初始化字段等操作。一个类可以定义多个构造函数,它们可以有不同的参数列表,称为重载构造函数。

构造函数语法结构:

class ClassName
{// 默认构造函数public ClassName(){// 构造函数的代码逻辑}// 带参数的构造函数public ClassName(parameters){// 构造函数的代码逻辑}
}
class Person
{//get与set 代表展开了属性赋值取值的过程//get表示当使用这个属性的时候会执行的代码//set表示为这个属性赋值的时候会执行的代码public string Name { get; set; }public int Age { get; set; }// 默认构造函数public Person(){//this 关键字 代表当前实例的对象,属性都要 对象.属性//在当前类中,this代表当前实例的对象,开发者不需要在创建了,//如果不写this程序会自动补充this.Name = "guobeibei";Age = 18;}// 带参数的构造函数(重构)//重构是指在同一个类中定义多个不同参数的构造函数public Person(string name, int age){Name = name;Age = age;}//还可以声明静态构造函数static People() {//注意:静态构造函数不能直接进行调用,是自动调用的//(访问实例构造函数的时候会自动激活静态构造函数)Console.WriteLine("这是静态构造函数");}
}// 创建Person对象并使用构造函数进行初始化
Person person1 = new Person(); // 使用默认构造函数
Console.WriteLine(person1.Name); //郭贝贝// 使用带参数的构造函数(重构)
Person person2 = new Person("郭贝贝同学", 19); 
Console.WriteLine(person2.Name); // 郭贝贝同学
Console.WriteLine(person2.Age); // 19

构造函数与普通函数的区别?

两者不同点构造函数普通函数
触发时机在创建类的实例(对象)时自动触发,用于初始化对象的成员变量。需要通过对象或类名来调用,根据需要手动触发执行。
返回类型没有返回类型,包括void。它们的目的是初始化对象,而不是返回值。具有返回类型,可以通过return语句返回值。
方法名与类名相同,用于标识该构造函数用于创建对象的初始化工作。可以自定义方法名,以便更好地描述方法的功能。
调用方式由编译器根据对象的创建来自动调用,且每次创建对象时只能调用一次构造函数。需要通过对象或类名显式调用,可以多次调用。
对象初始化用于初始化对象的成员变量,为它们分配内存并设置初始值。可以对对象进行操作和修改,但不会影响对象的创建和初始化。

构造函数是用于对象的初始化,而普通函数主要用于对象的操作和行为。构造函数在创建对象时自动调用,而普通函数需要手动调用。

2、析构函数

构造函数在调用的时候会分配一部分内存,这块内存被放在了堆上,c#内存回收机制属于自动回收,原则意义上来讲不需要手动释放,但是如果能够结合良好的编码习惯,可以搭配类似于析构函数之类的方法,让内存释放更高效。

析构函数:当引用对象被回收时,会调用该函数,可以在此处做一些内存回收,一个类中只能有一个析构函数,不能继承,也不能重载,不能被主动调用,没有修饰符,没有参数。

语法结构

class MyClass
{//析构函数(前面带一个 ~)~MyClass(){// 在这里编写析构函数的代码}
}
class People {//设置一个定时器:属于连续执行的属性,可能不会被程序自动释放,容易一直占用内存Timer timer { get; set; }public People() {Console.WriteLine("这是构造函数");}~People() {timer = null;}
}
http://www.lryc.cn/news/262057.html

相关文章:

  • jmeter 如何循环使用接口返回的多值?
  • VLAN 详解一(VLAN 基本原理及 VLAN 划分原则)
  • Android - 分区存储 MediaStore、SAF
  • Shiro框架权限控制
  • centOS7 安装tailscale并启用子网路由
  • spring 项目中如何处理跨越cors问题
  • importlib --- import 的实现
  • 【PyTorch】现代卷积神经网络
  • 用python编写九九乘法表
  • Google Gemini 模型本地可视化
  • 数据修复:.BlackBit勒索病毒来袭,安全应对方法解析
  • 拓扑排序实现循环依赖判断 | 京东云技术团队
  • Java的NIO工作机制
  • 一个简单的光线追踪渲染器
  • C++学习笔记(十二)------is_a关系(继承关系)
  • DC电源模块的设计与制造技术创新
  • Sketch for Mac:实现你的创意绘图梦想的矢量绘图软件
  • ReactNative0.73发布,架构升级与更好的调试体验
  • SVN忽略文件的两种方式
  • 手写VUE后台管理系统10 - 封装Axios实现异常统一处理
  • JavaScript装饰者模式
  • C++学习笔记01
  • 【UE5】初识MetaHuman 创建虚拟角色
  • 物流实时数仓:数仓搭建(DWD)一
  • MATLAB安装
  • C语言——预处理详解(#define用法+注意事项)
  • Linux(23):Linux 核心编译与管理
  • Oracle RAC环境下redo log 文件的扩容
  • Java入门学习笔记一
  • 分布式块存储 ZBS 的自主研发之旅|元数据管理