日期:2014-05-19  浏览次数:20905 次

问个函数返回对象的的问题
函数如下
public   DataTable   return_dt(string   sql)
{
OleDbConnection   con=new   OleDbConnection(数据库链接字符)
try
{
      con.Open();
}
catch   (OleDbException   err)  
{   MessageBox.Show(err.Message);   }
OleDbCommand   cmd   =   con.CreateCommand();
cmd.CommandText   =   sql;//sql语句

try
{
dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection));
}
catch   (OleDbException   err)
{
    MessageBox.Show(err.Message   +   cmd.CommandText);
}

cmd.Dispose();
con.Close();
return   (dt);

}

函数引用:
DataTable     ab=   return_dt(string   sql);

现在在内存里是有2个DataTable,及函数处理有1个然后又赋值给了ab   ,还是说只有1个DataTable   就是ab

------解决方案--------------------
DataTable 是引用类型,因此内存里只有一个真正的 DataTable,

即 return_dt(string sql) 的返回值,

当然还有一个引用,即 ab!

解释完毕!
------解决方案--------------------
DataTable ab= new DataTable();
ab = return_dt(string sql) ;
=========================
托管堆有两个DataTable
new DataTable();和 return_dt()函数返回的,
但new DataTable()由于在栈中没有引用了,很快会被回收,能用的就只有ab指向的这个return_dt(string sql) ;了

------解决方案--------------------