在下有一个关于引用不是很明白的问题。
我写了一个操作数据库的类如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
namespace RCTest2
{
class clsDB
{
public DataTable OperaDB(string strCom)
{
string strConn = "server=.;uid=sa;pwd=sa;database=liang";
SqlDataReader dRead;
SqlConnection conn = new SqlConnection(strConn);
SqlCommand cmd;
DataTable dt=new DataTable();
//strCom 为要执行的SQL语句
conn.Open();
cmd = new SqlCommand(strCom,conn);
dRead = cmd.ExecuteReader();
dt.Load(dRead);
conn.Close();
return dt;
}
}
}
然后在程序里是这样使用的
string strCom = "select * from generalTable";
dataGridView1.DataSource = (new clsDB()).OperaDB(strCom);
令我感到奇怪的是在OperaDB函数里面new的DataTable在函数结束的时候不是应该像其它函数内部变量被销毁吗?那么引用指向一个被销毁的东西为什么还有数据呢?还是因为这个datatable还有一用指着它所以它所属的那个类对象一直保留着还没有划进垃圾回收的队伍。请高手们指教。