最近看到一个程序,有些细节问题怎么也看不懂,就是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呢??*/
下面是这个程序中的一个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呢??*/
解决方案 »
- RS485通讯求助
- 请问c#.net是个什么东东啊?可以用来开发应用程序吗?
- 一个关于文件下载的问题
- 关于画弧问题!求帮助
- PropertyInfo.setvalue 的问题。代码如下,在线等很急
- 如何修改c#程序运行时在进程中的名字?
- 2005 工具箱的数据项中怎么没有 sqlconnection 或oldbconnection控件?
- 为什么在while里传递参数不能累计?? 求教!
- 急 !!! 在 .net 里和 APACHE 对应的东西是什么?
- C#中添加,删除,更改最快的方式是那种?
- nhibernate 中enum类型如何映射?
- 用OWC时传入正值,怎么会出现负值的曲线图呢??????(200分求解,UP有分)
http://blog.sina.com.cn/u/1251655220
如有问题请留言,一定在第一时间回复!
这只是一个大家都遵守的约定而已,无它