最近看到一个程序,有些细节问题怎么也看不懂,就是IDispose的用法,还有一些其他的,看了MSDN,上面的话太专业了,有点看天书的感觉,希望各位高手不吝赐教。
下面是这个程序中的一个DLL块。主要看不懂的就是最结尾处的一点点。
using System;
using System.Data;
using System.Data.SqlClient;namespace Aptech.Student.Common
{
    public class DataBaseOperate:IDisposable
/*为什么要继承IDispose类呢?*/
    {
        private string m_sConnectionString;
        // 数据库连接标志
        private bool m_bConnected;
        // 存储过程开启标志
        private bool m_bTransaction;
        //数据库连接对象
        private SqlConnection m_sqlConnection;
        private SqlCommand m_sqlCommand;
        private SqlTransaction m_sqlTransaction;
        private SqlDataAdapter m_sqlDataAdapter;
        
        public DataBaseOperate():this("user id=sa;password=510902;data source=\"YAOYANG\\YAOYANG\";initial catalog=Student")
        {
        }
        
        public DataBaseOperate(
            string sConnectionString)
        {
            if (sConnectionString != "")
            {
                m_sConnectionString = sConnectionString;
                m_bConnected = false;
            }
            m_bTransaction = false;
        } 
                    …… 中间一大串连接数据库和事务的方法
                    ……
                    ……
        /// 除去对象资源.
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(true);
        }/*如果Dispose(bool)函数是手动清理垃圾的函数,GC.SuppressFinalize(true); 是设置让程序不要自动清理垃圾,那么GC.SuppressFinalize(true); 应该写到Dispose(true);的前面才对吗??*/        ///    释放对象实例变量.
        protected virtual void Dispose(bool bDispose)
        {
            if (!bDispose)
                return; 
            
            if (m_bConnected)
            {
                if (m_sqlConnection.State != ConnectionState.Closed )
                {
                    m_sqlConnection.Dispose();
                    m_sqlConnection.Close();
                    
                    m_sqlCommand = null;
                    m_sqlConnection = null;
                    m_sqlTransaction = null;/*如果将对象名看作指针或者引用的话,执行完m_sqlConnection.Dispose();这一句,就已经释放了内存中的所有资源,也就是说内存中没有m_sqlConnection这个东西了,既然没有它了,还怎么可以用它(m_sqlConnection)去调用Close()方法??又让它做=null;的操作??我实在不明白,老师的回答也不是让我很满意,希望各位高手指点!谢谢了!!*/                    m_bConnected = false;
                }
            }
        }
    }
}/*还有就是关于IDispose类的用法,它是做什么用的呢??为什么要用它呢?
本题中调用protected virtual void Dispose(bool bDispose)方法是传递的参数是True,那么什么时候传发False呢??*/