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;}
}
相关文章:
C#基础——构造函数、析构函数
C#基础——构造函数、析构函数 1、构造函数 构造函数是一种特殊的方法,用于在创建类的实例时进行初始化操作。构造函数与类同名,并且没有返回类型。 构造函数在对象创建时自动调用,可以用来设置对象的初始状态、分配内存、初始化字段等操作…...
jmeter 如何循环使用接口返回的多值?
有同学在用jmeter做接口测试的时候,经常会遇到这样一种情况: 就是一个接口请求返回了多个值,然后下一个接口想循环使用前一个接口的返回值。 这种要怎么做呢? 有一定基础的人,可能第一反应就是先提取前一个接口返回…...
VLAN 详解一(VLAN 基本原理及 VLAN 划分原则)
VLAN 详解一(VLAN 基本原理及 VLAN 划分原则) 在早期的交换网络中,网络中只有 PC、终端和交换机,当某台主机发送一个广播帧或未知单播帧时,该数据帧会被泛洪,甚至传递到整个广播域。而广播域越大ÿ…...
Android - 分区存储 MediaStore、SAF
官方页面 参考文章 一、概念 分区存储(Scoped Storage)的推出是针对 APP 访问外部存储的行为(乱建乱获取文件和文件夹)进行规范和限制,以减少混乱使得用户能更好的控制自己的文件。 公有目录被分为两大类:…...
Shiro框架权限控制
首先去通过配置类的用户认证,在用户认证完成后,进行用户授权,用户通过授权之后再跳转其他的界面时,会进行一个验证,当前账号是否有权限。 前端权限控制显示的原理 在前端中,通常使用用户的角色或权限信息来…...
centOS7 安装tailscale并启用子网路由
1、在centOS7上安装Tailscale客户端 #安装命令所在官网位置:https://tailscale.com/download/linux #具体命令为: curl -fsSL https://tailscale.com/install.sh | sh #命令执行后如下图所示2、设置允许IP转发和IP伪装。 安装后,您可以启动…...
spring 项目中如何处理跨越cors问题
1.使用 CrossOrigin 注解 作用于controller 方法上 示例如下 RestController RequestMapping("/account") public class AccountController {CrossOriginGetMapping("/{id}")public Account retrieve(PathVariable Long id) {// ...}DeleteMapping(&quo…...
importlib --- import 的实现
3.1 新版功能. 源代码 Lib/importlib/__init__.py 概述 importlib 包具有三重目标。 一是在 Python 源代码中提供 import 语句的实现(并且因此而扩展 __import__() 函数)。 这提供了一个可移植到任何 Python 解释器的 import 实现。 与使用 Python 以…...
【PyTorch】现代卷积神经网络
文章目录 1. 理论介绍1.1. 深度卷积神经网络(AlexNet)1.1.1. 概述1.1.2. 模型设计 1.2. 使用块的网络(VGG)1.3. 网络中的网络(NiN)1.4. 含并行连结的网络(GoogLeNet)1.5. 批量规范化…...
用python编写九九乘法表
1 问题 我们在学习一门语言的过程中,都会练习到编写九九乘法表这个代码,下面介绍如何编写九九乘法表的流程。 2 方法 (1)打开pycharm集成开发环境,创建一个python文件,并编写第一行代码,主要构建…...
Google Gemini 模型本地可视化
Google近期发布了Gemini模型,而且开放了Gemini Pro API,Gemini Pro 可免费使用! Gemini Pro支持全球180个国家的38种语言,目前接受文本、图片作为输入并生成文本作为输出。 Gemini Pro的表现超越了其他同类模型,当前版…...
数据修复:.BlackBit勒索病毒来袭,安全应对方法解析
导言: 黑色数字罪犯的新玩具——.BlackBit勒索病毒,近来成为网络安全领域的头号威胁。这种恶意软件以其高度隐秘性和毁灭性而引起广泛关注。下面是关于.BlackBit勒索病毒的详细介绍,如不幸感染这个勒索病毒,您可添加我们的技术服…...
拓扑排序实现循环依赖判断 | 京东云技术团队
本文记录如何通过拓扑排序,实现循环依赖判断 前言 一般提到循环依赖,首先想到的就是Spring框架提供的Bean的循环依赖检测,相关文档可参考: https://blog.csdn.net/cristianoxm/article/details/113246104 本文方案脱离Spring Be…...
Java的NIO工作机制
文章目录 1. 问题引入2. NIO的工作方式3. Buffer的工作方式4. NIO数据访问方式 1. 问题引入 在网络通信中,当连接已经建立成功,服务端和客户端都会拥有一个Socket实例,每个Socket实例都有一个InputStream和OutputStream,并通过这…...
一个简单的光线追踪渲染器
前言 本文参照自raytracing in one weekend教程,地址为:https://raytracing.github.io/books/RayTracingInOneWeekend.html 什么是光线追踪? 光线追踪模拟现实中的成像原理,通过模拟一条条直线在场景内反射折射,最终…...
C++学习笔记(十二)------is_a关系(继承关系)
你好,这里是争做图书馆扫地僧的小白。 个人主页:争做图书馆扫地僧的小白_-CSDN博客 目标:希望通过学习技术,期待着改变世界。 提示:以下是本篇文章正文内容,下面案例可供参考 文章目录 前言 一、继承关系…...
DC电源模块的设计与制造技术创新
BOSHIDA DC电源模块的设计与制造技术创新 DC电源模块的设计与制造技术创新主要涉及以下几个方面: 1. 高效率设计:传统的DC电源模块存在能量转换损耗较大的问题,技术创新可通过采用高效率的电路拓扑结构、使用高性能的功率开关器件和优化控制…...
Sketch for Mac:实现你的创意绘图梦想的矢量绘图软件
随着数字时代的到来,矢量绘图软件成为了广告设计、插画创作和UI设计等领域中必不可少的工具。在众多矢量绘图软件中,Sketch for Mac(矢量绘图软件)以其强大的功能和简洁的界面脱颖而出,成为了众多设计师的首选。 Sket…...
ReactNative0.73发布,架构升级与更好的调试体验
这次更新包含了多种提升开发体验的改进,包括: 更流畅的调试体验: 通过 Hermes 引擎调试支持、控制台日志历史记录和实验性调试器,让调试过程更加高效顺畅。稳定的符号链接支持: 简化您的开发工作流程,轻松将文件或目录链接到其他…...
SVN忽略文件的两种方式
当使用版本管理工具时,提交到代码库的文档我们不希望存在把一些临时文件也推送到仓库中,这样就需要用到忽略文件。SVN的忽略相比于GIT稍显麻烦,GIT只需要在.gitignore添加忽略规则即可。而SVN有两种忽略方式,一个是全局设置&#…...
手写VUE后台管理系统10 - 封装Axios实现异常统一处理
目录 前后端交互约定安装创建Axios实例拦截器封装请求方法业务异常处理 axios 是一个易用、简洁且高效的http库 axios 中文文档:http://www.axios-js.com/zh-cn/docs/ 前后端交互约定 在本项目中,前后端交互统一使用 application/json;charsetUTF-8 的请…...
JavaScript装饰者模式
JavaScript装饰者模式 1 什么是装饰者模式2 模拟装饰者模式3 JavaScript的装饰者4 装饰函数5 AOP装饰函数6 示例:数据统计上报 1 什么是装饰者模式 在程序开发中,许多时候都我们并不希望某个类天生就非常庞大,一次性包含许多职责。那么我们就…...
C++学习笔记01
01.C概述(了解) c语言在c语言的基础上添加了面向对象编程和泛型编程的支持。 02.第一个程序helloworld(掌握) #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;//标准命名空间int main() {//co…...
【UE5】初识MetaHuman 创建虚拟角色
步骤 在UE5工程中启用“Quixel Bridge”插件 打开“Quixel Bridge” 点击“MetaHumans-》MetaHuman Presets UE5” 点击“START MHC” 在弹出的网页中选择一个虚幻引擎版本,然后点击“启动 MetaHuman Creator” 等待一段时间后,在如下页面点击选择一个人…...
物流实时数仓:数仓搭建(DWD)一
系列文章目录 物流实时数仓:采集通道搭建 物流实时数仓:数仓搭建 物流实时数仓:数仓搭建(DIM) 物流实时数仓:数仓搭建(DWD)一 文章目录 系列文章目录前言一、文件编写1.目录创建2.b…...
MATLAB安装
亲自验证有效,多谢这位网友的分享: https://blog.csdn.net/xiajinbiaolove/article/details/88907232...
C语言——预处理详解(#define用法+注意事项)
#define 语法规定 #define定义标识符 语法: #define name stuff #define例子 #include<stdio.h> #define A 100 #define STR "abc" #define FOR for(;;)int main() {printf("%d\n", A);printf("%s\n", STR);FOR;return 0; } 运行结果…...
Linux(23):Linux 核心编译与管理
编译前的任务:认识核心与取得核心原始码 Linux 其实指的是核心。这个【核心(kernel)】是整个操作系统的最底层,他负责了整个硬件的驱动,以及提供各种系统所需的核心功能,包括防火墙机制、是否支持 LVM 或 Quota 等文件系统等等&a…...
Oracle RAC环境下redo log 文件的扩容
环境: 有一个2节点RAC每一个节点2个logfile group每一个group含2个member每一个member的大小为200M 目标:将每一个member的大小有200M扩充到1G。 先来看下redo log的配置: SQL> select * from v$log;GROUP# THREAD# SEQUENCE# …...
Java入门学习笔记一
一、Java语言环境搭建 1、JAVA语言的跨平台原理 1.1、什么是跨平台性? 跨平台就是说,同一个软件可以在不同的操作系统(例如:Windows、Linux、mad)上执行,而不需要对软件做任务处理。即通过Java语言编写的…...
现在流行的网站开发语言/网站查询进入
Spring Cloud Gateway除了具备请求路由功能之外,也支持对请求的过滤。通过Zuul网关类似,也是通过过滤器的形式来实现的。那么接下来我们一起来研究一下Gateway中的过滤器3.3.1 过滤器基础(1) 过滤器的生命周期Spring Cloud Gatewa…...
dz做的网站容易收录吗/百度seo优化教程免费
在Linux当中查找文件的命令但多,但个人觉得最重要的搜索文件的命令是find,这个命令使用非常频繁,需要熟练掌握 文章目录前言find 使用详解1.介绍2.语法详解3. find 选项示例(option)4、可选项总结友情链接前言 在Linux当中查找文件的命令但多…...
免费英文网站建设/网络营销与直播电商专升本
把数组排成最小的数(三十二) 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 代码…...
安陆网站建设推广/百度网盘资源搜索
本章首要介绍一下搜索引擎蜘蛛都有哪些类型。了解类型之前要先知道什么是搜索引擎蜘蛛。百度百科上有相关解说,我们用一个形象的表述重新说一下。以百度为例,大家要为什么能在百度上搜到各类网站网页的内容,是由于百度派出去的小弟—百度蜘蛛…...
深圳网站建设行业新闻/福州百度开户多少钱
首先需要安装Vray渲染器 1.在场景中打一个自由摄像机 2.渲染设置尺寸设置,宽高比为2:1 3.在Vray设置页面,设置相机类型为球面,视角设置为360度 渲染结果...
东莞网站se/seo网络推广什么意思
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及 Full GC 次数过多的问题。 当然,这些问题最终导致的直观现象就是系统运行缓慢,并且有大量的报警。 本文主要针对系统运行缓慢这一问题,提供该问题…...