主题:跪求IDispose的用法
最近看到一个程序,有些细节问题怎么也看不懂,就是IDispose的用法,还有一些其他的,看了MSDN,上面的话太专业了,有点看天书的感觉,希望各位高手不吝赐教。
下面是这个程序中的一个DLL块。主要看不懂的就是最结尾处的一点点。
using System;
using System.Data;
using System.Data.SqlClient;
namespace Aptech.Student.Common
{
public class DataBaseOperate:IDisposable
[color=FF0000]/*为什么要继承IDispose类呢?*/[/color]
{
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);
}
[color=FF0000]
/*如果Dispose(bool)函数是手动清理垃圾的函数,GC.SuppressFinalize(true); 是设置让程序不要自动清理垃圾,那么GC.SuppressFinalize(true); 应该写到Dispose(true);的前面才对吗??*/[/color]
/// 释放对象实例变量.
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;
[color=FF0000]/*如果将对象名看作指针或者引用的话,执行完m_sqlConnection.Dispose();这一句,就已经释放了内存中的所有资源,也就是说内存中没有m_sqlConnection这个东西了,既然没有它了,还怎么可以用它(m_sqlConnection)去调用Close()方法??又让它做=null;的操作??我实在不明白,老师的回答也不是让我很满意,希望各位高手指点!谢谢了!!*/[/color]
m_bConnected = false;
}
}
}
}
}
[color=FF0000]
/*还有就是关于IDispose类的用法,它是做什么用的呢??为什么要用它呢?
本题中调用protected virtual void Dispose(bool bDispose)方法是传递的参数是True,那么什么时候传发False呢??*/[/color]
下面是这个程序中的一个DLL块。主要看不懂的就是最结尾处的一点点。
using System;
using System.Data;
using System.Data.SqlClient;
namespace Aptech.Student.Common
{
public class DataBaseOperate:IDisposable
[color=FF0000]/*为什么要继承IDispose类呢?*/[/color]
{
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);
}
[color=FF0000]
/*如果Dispose(bool)函数是手动清理垃圾的函数,GC.SuppressFinalize(true); 是设置让程序不要自动清理垃圾,那么GC.SuppressFinalize(true); 应该写到Dispose(true);的前面才对吗??*/[/color]
/// 释放对象实例变量.
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;
[color=FF0000]/*如果将对象名看作指针或者引用的话,执行完m_sqlConnection.Dispose();这一句,就已经释放了内存中的所有资源,也就是说内存中没有m_sqlConnection这个东西了,既然没有它了,还怎么可以用它(m_sqlConnection)去调用Close()方法??又让它做=null;的操作??我实在不明白,老师的回答也不是让我很满意,希望各位高手指点!谢谢了!!*/[/color]
m_bConnected = false;
}
}
}
}
}
[color=FF0000]
/*还有就是关于IDispose类的用法,它是做什么用的呢??为什么要用它呢?
本题中调用protected virtual void Dispose(bool bDispose)方法是传递的参数是True,那么什么时候传发False呢??*/[/color]