• C# using 实现强制资源清理


    一、总述:

    使用using语句,定义一个范围,在范围结束时处理对象 (该对象必须实现了IDisposable接口)。

    其功能和try ,catch,finally完全相同。

    二、用法: 
    using (Class1 c = new Class1())
    {
     
    }//在范围结束时清理非托管不受GC控制的资源
     

    其与下面的try…catch…finallya功能一样

    Class1 f = new Class1();
    try
    { //执行代码
    }
    catch()
    {
    //异常处理
    }
    finally
    {

    f.Disposable();

     
    }
    例如:

          

    using (SqlConnection cn = new SqlConnection(SqlConnectionString)){......}//数据库连接
    using (SqlDataReader dr = db.GetDataReader(sql)){......}//DataReader


    //PS:这里SqlConnection和SqlDataReader对象都默认实现了IDisposable接口,如果是自己写的类,那就要自己手动来实现IDisposable接口。比如:
    using (Employee emp = new Employee(userCode))
    {
               //......
    }
    //Emlpoyee.cs类:       
    public class Employee:IDisposable
    {
           实现IDisposable接口#region 实现IDisposable接口
            /**//// <summary>
           /// 通过实现IDisposable接口释放资源
            /// </summary>
            public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
            /**//// <summary>
            /// 释放资源实现
             /// </summary>
            /// <param name="disposing"></param>
            protected virtual void Dispose(bool disposing)
            {
                if (!m_disposed)
                {
                   if (disposing)
                    {
                        // Release managed resources
                        if(db!=null)
                            this.db.Dispose();
                        if(dt!=null)
                            this.dt.Dispose();
                        this._CurrentPosition = null;
                        this._Department = null;
                        this._EmployeeCode = null;               
                   }
                    // Release unmanaged resources
                    m_disposed = true;
                }
            }
            /**//// <summary>
            /// 析构函数
             /// </summary>
            ~Employee()
            {
                Dispose(false);
            }
            private bool m_disposed;
            #endregion
    }      

  • 相关阅读:
    树线段hdu 4508 美素数(线段树)
    自定义context自定义Dialog之Progress(二)
    实现语言C语言简单实现五子棋
    调用博客paip.基于HTML gui界面的javascript JS实现SLEEP。。
    水印控件windows phone中,制作一个自定义的密码输入框控件,含图片,有水印,星号显示
    请求网络网络编程
    调试网页PAIP HTML的调试与分析工具
    输出流输入输入输出流
    标记协议http协议与XML书写规范及解析技术
    描述算法10673 Play with Floor and Ceil
  • 原文地址:https://www.cnblogs.com/johnpher/p/2872908.html
Copyright © 2020-2023  润新知