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

C#核心概念解析:析构函数、readonly与this关键字

🔍 析构函数:资源清理的最后防线

核心作用

析构函数(~ClassName)在对象销毁前执行,专用于释放非托管资源(如文件句柄、非托管内存)。托管资源(如.NET对象)由GC自动回收,一般无需手动处理。

使用场景与限制

  • 仅处理Win32 API资源或非托管内存时需使用。
  • 执行时机不确定(由GC决定),不可依赖于实时清理。
  • 推荐替代方案:实现IDisposable接口+Dispose模式,结合using语句确保资源及时释放。

代码示例

public class ResourceHolder 
{private IntPtr fileHandle; // 非托管文件句柄 ~ResourceHolder() // 析构函数 {CloseHandle(fileHandle); // 调用Win32 API释放资源 }
}

📌 readonly修饰符:安全的“只读”守卫

与const的关键区别:

特性constreadonly
初始化时机编译时运行时(构造函数)
内存存储无独立存储有独立内存位置
作用域隐含static支持实例/静态字段

使用场景:

  • 运行时动态赋值:在不同构造函数中设置不同值(如几何图形的边数)。
  • 避免意外修改:保护对象内部状态(如配置参数、数学常量)。
    代码示例:
class ConfigLoader 
{readonly string _configPath; // 运行时初始化 public ConfigLoader(string path) => _configPath = path;public ConfigLoader() => _configPath = "default.json";  // 不同构造方法赋值 
}

🔑 this关键字:当前实例的“身份证”

三大核心用途:

消除命名冲突

区分同名的类字段与方法参数(慎用,建议参数名加_前缀避免冲突)。

public void SetValue(int value) => this.value  = value;

链式调用构造函数

在构造函数中通过this调用其他重载构造方法。

public class User 
{public User(string name) : this(name, 18) {} // 调用下方构造函数 public User(string name, int age) { ... }
}

传递自身引用

将当前对象作为参数传递给外部方法。

public void Save() => Database.Save(this);

最佳实践总结

  • 析构函数:非托管资源的“保底”清理,优先用IDisposable。
  • readonly:保护字段不被篡改,灵活应对运行时初始化需求。
  • this关键字:增强代码可读性,避免歧义(但避免过度使用)。

相关文章:

  • python模块管理环境变量
  • 无损图片压缩 本地处理 批量处理提升效率 无需联网+无广告
  • 位图——求两数之和
  • 力扣热题——查找包含给定字符的单词
  • 上海内推 | 上海算法创新研究院-上海交大联合招收空间智能/具身智能算法实习生
  • springboot中redis的事务的研究
  • 动态规划dp
  • 力扣刷题DAY16(二叉树+迭代遍历)
  • NHANES指标推荐:PHDI
  • 数据库blog6_商业数据库下载知识
  • Day 34
  • 【强化学习】#7 基于表格型方法的规划和学习
  • 续位值运算---左移、右移
  • 2025年安克创新Anker社招校招入职测评 | 3天备考、自适应能力cata测评北森题库、安克创造者启航试炼、安克AI能力测评能力测评历年真题
  • 抖音出品AI短剧《牧野诡事》能否给AI短剧带来新一轮爆发?
  • Linux中的nfs
  • Linux(6)——第一个小程序(进度条)
  • python打卡day35@浙大疏锦行
  • ping命令常用参数以及traceout命令
  • Cookie 与 Session
  • 电影网站源码怎么做的/八八网
  • 网站制作的步骤不包括哪些/医院营销策略的具体方法
  • 北京建设工程交易网/seo网站推广优化论文
  • 一个网站需要几个人/百度站长平台账号购买
  • 部门网站建设怎么做/怎么样在百度上推广自己的产品
  • wordpress主题个性/seo专业培训