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

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

核心作用

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

使用场景与限制

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

代码示例

python 复制代码
public class ResourceHolder 
{
    private IntPtr fileHandle; // 非托管文件句柄 

    ~ResourceHolder() // 析构函数 
    {
        CloseHandle(fileHandle); // 调用Win32 API释放资源 
    }
}

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

与const的关键区别:

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

使用场景:

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

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

三大核心用途:

消除命名冲突

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

python 复制代码
public void SetValue(int value) => this.value  = value;

链式调用构造函数

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

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

传递自身引用

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

csharp 复制代码
public void Save() => Database.Save(this);

最佳实践总结

  • 析构函数:非托管资源的"保底"清理,优先用IDisposable。
  • readonly:保护字段不被篡改,灵活应对运行时初始化需求。
  • this关键字:增强代码可读性,避免歧义(但避免过度使用)。
相关推荐
DoraBigHead2 分钟前
作用域链与执行上下文的地下迷宫
前端·javascript·面试
404未精通的狗5 分钟前
(C++)STL:list认识与使用全解析
开发语言·c++·list
苏克贝塔16 分钟前
Qt 图形视图框架4-动画、碰撞检测和图形项组
开发语言·qt
_oP_i20 分钟前
无法找到来自源 EdgeWebView,实际安装了,偶尔出现
c#
阿蒙Amon1 小时前
C#类型转换:从基础到进阶的全景解析
开发语言·c#
猎嘤一号2 小时前
Windows11桌面解锁守护脚本
开发语言·python·opencv
蓝婷儿3 小时前
Python 数据建模与分析项目实战预备 Day 2 - 数据构建与字段解析(模拟简历结构化数据)
开发语言·python·机器学习
青衫客363 小时前
浅谈 Python 中的 yield——yield的返回值与send()的关系
开发语言·python
玩代码4 小时前
CompletableFuture 详解
java·开发语言·高并发·线程
hz_zhangrl4 小时前
CCF-GESP 等级考试 2025年6月认证C++三级真题解析
开发语言·c++·青少年编程·gesp·gesp2025年6月·c++三级