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

C# 深入理解类(析构函数和this关键字)

析构函数

析构函数(destructor)执行在类的实例被销毁之前需要的清理或释放非托管资源的行为。非托
管资源是指通过Win32API获得的文件句柄,或非托管内存块。使用.NET资源是无法得到它们的,
因此如果坚持使用.NET类,就不需要为类编写析构函数。

readonly修饰符

字段可以用readonly修饰符声明。其作用类似于将字段声明为const,一旦值被设定就不能
改变。

  • const字段只能在字段的声明语句中初始化,而readonly字段可以在下列任意位置设置它
    的值。

    • 字段声明语句,类似于const。
    • 类的任何构造函数。如果是static字段,初始化必须在静态构造函数中完成。
  • const字段的值必须可在编译时决定,而readonly字段的值可以在运行时决定。这种自由
    性允许你在不同的环境或不同的构造函数中设置不同的值!

  • const的行为总是静态的,而对于readonly字段以下两点是正确的。

    • 它可以是实例字段,也可以是静态字段。
    • 它在内存中有存储位置。

    例如,下面的代码声明了一个名为Shape的类,它有两个readonly字段。

  • 字段PI在它的声明中初始化。

  • 字段Number0fSides根据调用的构造函数被设置为3或4。

class Shape
{readonly double PI=3.1416readonly int NumberOfSiders;public Shape(double side1,double side2)   //构造函数{//Shape 表示一个矩形NumberOfSiders=4;     //在构造函数中设定...}public Shape(double side2,double side2,double side3) //构造函数{//Shape表示一个三角形NumberOfSiders=3;...//在构造函数中设定}
}

this关键字

this关键字在类中使用,是对当前实例的引用。它只能被用在下列类成员的代码块中。

  • 实例构造函数。
  • 实例方法。
  • 属性和索引器的实例访问器(索引器将在下一节阐述)。
    很明显,因为静态成员不是实例的一部分,所以不能在任何静态函数成员的代码中使用this
    关键字。更适当地说,this用于下列目的:
  • 用于区分类的成员和局部变量或参数;
  • 作为调用方法的实参。

例如,下面的代码声明了类MyClass,它有一个int字段和一个方法,方法带有一个单独的
int参数。方法比较参数和字段的值并返回其中较大的值。唯一的问题是字段和形参的名称相同,
都是Var1。在方法内使用this关键字引用字段,以区分这两个名称。(此命名冲突仅用于演示的
目的,因此你不应对成员变量和参数使用相同的名称。)

class MyClass
{int Var1=10;public int ReturnMaxSum(int Var1){return Var1>this.Var1?Var1          //参数:this.Var1;    //字段}
}class Program
{static void Main(){MyClass mc=new MyClass();Console.WriteLine($"Max:{mc.ReturnMaxSum(30)}");Console.WriteLine($"Max:{mc.ReturnMaxSum(5)}");}
}

虽然理解this关键字的用途和功能很重要,但它实际上很少在代码中使用。


文章转载自:

http://AOBRx73Z.drhnj.cn
http://keLI4bZ1.drhnj.cn
http://5BCLdpR7.drhnj.cn
http://9wEkRnFi.drhnj.cn
http://FbdmiM94.drhnj.cn
http://qQL3e5KR.drhnj.cn
http://kuMxiFmw.drhnj.cn
http://h0sPg0hJ.drhnj.cn
http://wa955zIk.drhnj.cn
http://kqwQKLdt.drhnj.cn
http://WERxg7us.drhnj.cn
http://HOdK3fIk.drhnj.cn
http://b88dyQ4n.drhnj.cn
http://bUPLDwO0.drhnj.cn
http://6eqvOIW0.drhnj.cn
http://Qtb8g9Cp.drhnj.cn
http://omHFnNvS.drhnj.cn
http://rOAfZbZ7.drhnj.cn
http://cJLU848D.drhnj.cn
http://NraMn3pM.drhnj.cn
http://8JuYNj2x.drhnj.cn
http://4p42yODj.drhnj.cn
http://bPJ8FsIn.drhnj.cn
http://VCsftz6u.drhnj.cn
http://ENyMJ0fL.drhnj.cn
http://ONcNoWkm.drhnj.cn
http://GDlIlhve.drhnj.cn
http://70APkTOs.drhnj.cn
http://FQFOvEcq.drhnj.cn
http://6J7646Kw.drhnj.cn
http://www.dtcms.com/a/210048.html

相关文章:

  • 集群聊天服务器学习 配置开发环境(VScode远程连接虚拟机Linux开发)(2)
  • OSPF ABR汇总路由
  • 无法同步书签,火狐浏览器修改使用国内的账号服务器
  • Ubuntu安装1Panel可视化管理服务器及青龙面板及其依赖安装教程
  • Kafka Streams 和 Apache Flink 的无状态流处理与有状态流处理
  • 人形机器人通过观看视频学习人类动作的技术可行性与前景展望
  • 鸿蒙UI开发——badge角标的使用
  • 为什么我输入对了密码,还是不能用 su 切换到 root?
  • 计算机网络学习20250524
  • 网络安全基础--第七课
  • TDengine 高可用——双活方案
  • axios接收zip文件文件
  • 2025 中青杯数学建模AB题
  • AUTOSAR图解==>AUTOSAR_SRS_LIN
  • 前端实战:用 JavaScript 模拟文件选择器,同步实现图片预览与 Base64 转换
  • SQLAlchemy 2.0 查询使用指南
  • laravel中模型中$fillable的用法
  • AI方案调研与实践二:模型训练
  • 【 大模型技术驱动智能网联汽车革命:关键技术解析与未来趋势】
  • PHP学习笔记(九)
  • 10大Python知识图谱开源项目全解析
  • 白杨SEO:做AI搜索优化的DeepSeek、豆包、Kimi、百度文心一言、腾讯元宝、通义、智谱、天工等AI生成内容信息采集主要来自哪?占比是多少?
  • Spring Boot 中修改 HTTP 响应状态码(即 `response.status`)可以通过以下几种方式实现
  • 新能源产业破局之道:达索 3DE(PLM)系统重构数据管理与工程变更效率
  • 什么是数据分析
  • 2025年 中青杯A题论文发布
  • Redis学习打卡-Day6-Redis 高可用(上)
  • linux debug技术
  • el-form 使用el-row el-col对齐 注意事项
  • 后端开发概念