• 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
    }      

  • 相关阅读:
    自考新教材--p78
    自考新教材--p76_2
    自考新教材--p76_1
    自考新教材--p75
    自考新教材--p70
    自考新教材--p69
    以HTML5及其衍生技术为基础的B/S架构实时视频监控解决方案
    智能化安防视频监控行业发展是如何转变的?
    摄像头视频监控是如何与流媒体服务器云平台连接的?
    如何实现摄像头监控数据实时存储及传输?
  • 原文地址:https://www.cnblogs.com/johnpher/p/2872908.html
Copyright © 2020-2023  润新知