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关键字:增强代码可读性,避免歧义(但避免过度使用)。
相关推荐
hdsoft_huge1 小时前
Java & Spring Boot常见异常全解析:原因、危害、处理与防范
java·开发语言·spring boot
风中的微尘2 小时前
39.网络流入门
开发语言·网络·c++·算法
前端君2 小时前
实现最大异步并发执行队列
javascript
未来之窗软件服务2 小时前
幽冥大陆(二)RDIFSDK 接口文档:布草洗涤厂高效运营的技术桥梁C#—东方仙盟
开发语言·c#·rdif·仙盟创梦ide·东方仙盟
小冯记录编程3 小时前
C++指针陷阱:高效背后的致命危险
开发语言·c++·visual studio
1uther3 小时前
Unity核心概念⑨:Screen
开发语言·游戏·unity·c#·游戏引擎
知识分享小能手3 小时前
React学习教程,从入门到精通,React 组件核心语法知识点详解(类组件体系)(19)
前端·javascript·vue.js·学习·react.js·react·anti-design-vue
C_Liu_3 小时前
C++:类和对象(下)
开发语言·c++
coderxiaohan3 小时前
【C++】类和对象1
java·开发语言·c++
阿幸软件杂货间4 小时前
Office转PDF转换器v1.0.py
开发语言·pdf·c#