Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# idisposable

作者:昔日暖阳   发布日期:2026-05-06   浏览:120

using System;

public class DisposableResource : IDisposable
{
    // 假设这是需要释放的非托管资源
    private IntPtr nativeResource = Marshal.AllocHGlobal(100);

    // 标记对象是否已被释放
    private bool disposed = false;

    // 实现IDisposable接口
    public void Dispose()
    {
        // 调用Dispose方法并传递true,表示已手动调用Dispose
        Dispose(true);
        // 抑制垃圾回收器终结操作
        GC.SuppressFinalize(this);
    }

    // 释放资源的方法
    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (disposing)
            {
                // 释放托管资源
                // 例如:关闭文件流、网络连接等
            }

            // 释放非托管资源
            Marshal.FreeHGlobal(nativeResource);

            disposed = true;
        }
    }

    // 析构函数,确保在未显式调用Dispose时也能释放资源
    ~DisposableResource()
    {
        // 调用Dispose方法并传递false,表示未手动调用Dispose
        Dispose(false);
    }
}

// 使用示例
public class Program
{
    public static void Main()
    {
        using (var resource = new DisposableResource())
        {
            // 使用资源
        }
        // 此处资源已自动释放
    }
}

解释说明

  1. IDisposable 接口:

    • IDisposable 接口包含一个 Dispose 方法,用于释放资源。实现该接口的对象可以确保其占用的资源(尤其是非托管资源)能够及时释放。
  2. Dispose 方法:

    • Dispose 方法是 IDisposable 接口的一部分,用于释放托管和非托管资源。
    • Dispose(bool disposing) 是一个受保护的虚方法,允许派生类重写以释放特定资源。disposing 参数为 true 表示已显式调用 Dispose,为 false 表示正在通过析构函数进行清理。
  3. GC.SuppressFinalize(this):

    • 调用此方法可以通知垃圾回收器不要调用对象的终结器(析构函数),从而提高性能。
  4. 析构函数:

    • 如果对象没有显式调用 Dispose,则析构函数会确保资源被释放。它调用 Dispose(false),因为此时托管资源可能已经被回收。
  5. using 语句:

    • using 语句确保在代码块结束时自动调用 Dispose 方法,即使发生异常也能保证资源被正确释放。

上一篇:c# list

下一篇:c# console

大家都在看

c# 二进制

c# 创建目录

c# socket服务端连接多个客户端

c# datatable group by

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

c# invoke方法

.net和c#

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站