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

c# dispose

作者:戮尽逆者   发布日期:2025-09-11   浏览:93

using System;

public class MyClass : IDisposable
{
    // 资源句柄
    private IntPtr nativeResource = Marshal.AllocHGlobal(100);

    // 是否已经释放资源的标记
    private bool disposed = false;

    // 实现IDisposable接口
    public void Dispose()
    {
        // 释放资源并抑制终结
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    // 保护性Dispose模式
    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (disposing)
            {
                // 释放托管资源
                // 例如:关闭文件流、数据库连接等
            }

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

            disposed = true;
        }
    }

    // 析构函数
    ~MyClass()
    {
        // 不要重新抛出异常,因为析构函数中抛出异常会导致不确定的行为
        Dispose(false);
    }
}

// 使用示例
public class Program
{
    public static void Main()
    {
        using (MyClass myObject = new MyClass())
        {
            // 使用myObject
        }
        // myObject.Dispose() 会自动调用
    }
}

解释说明:

  1. IDisposable接口IDisposable接口包含一个方法Dispose(),用于释放资源。实现该接口的类可以确保资源在不再需要时被正确释放。
  2. Dispose方法Dispose()方法用于释放托管和非托管资源。通过调用Dispose(true),可以在释放托管资源的同时抑制垃圾回收器的终结操作。
  3. Dispose(bool disposing):这是一个受保护的虚方法,允许派生类重写以释放特定资源。disposing参数指示是否应该释放托管资源。
  4. 析构函数:如果对象未显式调用Dispose(),则在对象被垃圾回收时会调用析构函数,进而调用Dispose(false)来释放非托管资源。
  5. using语句using语句确保实现了IDisposable接口的对象在其作用域结束时自动调用Dispose()方法,从而确保资源及时释放。

上一篇:c# 向下取整

下一篇:c# using用法

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

c#网络编程

c# rectangle

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

Laravel 中文站