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关键字:增强代码可读性,避免歧义(但避免过度使用)。
相关推荐
三体世界3 小时前
HTTPS加密原理
linux·开发语言·网络·c++·网络协议·http·https
明月与玄武3 小时前
Python爬虫工作基本流程及urllib模块详解
开发语言·爬虫·python
云空3 小时前
《NuGet:.NET开发的魔法包管理器》
开发语言·.net
王中阳Go3 小时前
北京京东,看看难度
c#·linq
小怡同学..4 小时前
c++系列之智能指针的使用
开发语言·c++
黑客飓风4 小时前
JavaScript性能优化实战
开发语言·javascript·性能优化
云博客-资源宝4 小时前
Android Manifest 权限描述大全
android·开发语言·php
是紫焅呢5 小时前
I排序算法.go
开发语言·后端·算法·golang·排序算法·学习方法·visual studio code
周杰伦fans6 小时前
C# 中 string.Compare 比较两个字符串的字典顺序
c#
飞飞帅傅6 小时前
go语言位运算
开发语言·后端·golang