new 与不new的区别
一段代码如下,为什么声明datatable变量的时候不用new? 而声明dataset、Sqlconnection等都需要用new呢?不是在.net中,申明引用类型的变量都要用new吗?(Datatable也是一个类啊,应该是属于引用类型变量的吧?)
private void LoadAllNews()
{
AdoSql ReadAllNews=new AdoSql();//将AdoSql类实例化,定义一个对象ReadAllNews
DataTable NewsTable = ReadAllNews.ReadAllNews();
this.NewsGrid.DataSource=NewsTable;
this.NewsGrid.DataBind();
} --------------------编程问答-------------------- 像下面一段代码, 创建SqlCommand对象、 创建SqlDataAdapter 都用到了new.那为什么上面那段代码中,创建datatable对象的时候,没有使用new呢?他们有什么区别呢?
public DataTable ExecuteSqlRead(string SqlString)
{
SqlCommand SqlCmd = new SqlCommand();//定义一个命令对象
SqlConnection myconn=new SqlConnection(ConfigurationSettings.AppSettings["ConnString"]);//创建数据连接对象
SqlCmd.CommandText = SqlString;
SqlDataAdapter SqlAd = new SqlDataAdapter(SqlString,myconn);//创建数据适配对象
DataSet Rs = new DataSet();
SqlAd.Fill(Rs); //填充数据适配对象
return Rs.Tables[0]; //返回数据表
} --------------------编程问答-------------------- 请高手帮忙解答啊~~~~~~~~ --------------------编程问答-------------------- new的话是生成一个新的对象, DataTable NewsTable = ReadAllNews.ReadAllNews(); 这是因为ReadAllNews.ReadAllNews()这个方法返回一个datatable类型的对象 --------------------编程问答-------------------- public DataTable ExecuteSqlRead(string SqlString)
{
SqlCommand SqlCmd = new SqlCommand();//定义一个命令对象
SqlConnection myconn=new SqlConnection(ConfigurationSettings.AppSettings["ConnString"]);//创建数据连接对象
SqlCmd.CommandText = SqlString;
SqlDataAdapter SqlAd = new SqlDataAdapter(SqlString,myconn);//创建数据适配对象
DataSet Rs = new DataSet();
SqlAd.Fill(Rs); //填充数据适配对象
return Rs.Tables[0]; //返回数据表
}
上面这个方法的返回值是一个DATATABLE,它是一个引用,传回来的也是一个引用,也就是一个DataTable的实例对象,所以接收它的 DataTable NewsTable = ReadAllNews.ReadAllNews();
这里的NewsTable 就是指向上述方法返回的那个DataTable.已经引用到一个实例对象了,所以它不会是Null,没有必要先New一个出来.
你可以这样测试一下:
方法里:
SqlAd.Fill(Rs); //填充数据适配对象
Rs.Tables[0].TableName="returnDataTable";添加这句
return Rs.Tables[0]; //返回数据表
调用的位置:
AdoSql ReadAllNews=new AdoSql();//将AdoSql类实例化,定义一个对象ReadAllNews
DataTable NewsTable = ReadAllNews.ReadAllNews(); 改成:
DataTable NewsTable =new DataTable("myNewDataTable");
NewsTable = ReadAllNews.ReadAllNews();
MessageBox.Show(NewsTable.TableName);你看一下它显示出来的表名是"returnDataTable",而不是"myNewDataTable",你就应该明白,引用的是方法所返回的表.
本来想画个图的,那样比较直观,不过论坛里不知道怎么贴图.
--------------------编程问答-------------------- 和给分与不分有关 --------------------编程问答-------------------- 谢谢各位高手的回答。明白了一些!还需要仔细研究一下。 --------------------编程问答-------------------- 你自己要造一辆汽车,还是从别人那里买一辆汽车的区别。
--------------------编程问答-------------------- 你给分,就可以new一辆新车,不给,就只能从别人那得到一辆二手的 --------------------编程问答-------------------- 是否生成新实例 --------------------编程问答-------------------- 用new 是创建一个实例,用于不是静态类中。 --------------------编程问答-------------------- 呵呵。
例如:O o = new O();你吃的饭是你自己做的。
而 O o = factory.createO();这饭是别人做给你吃的。
不管怎么着你都不会饿着。 --------------------编程问答-------------------- 旁听,谢谢 --------------------编程问答-------------------- 学习! --------------------编程问答-------------------- 楼上的经典回答太精彩啦。
就让我这个后生封一下楼吧!!
OK --------------------编程问答-------------------- 顶 就是新车与二手车的区别 --------------------编程问答-------------------- 哈哈,咱们C#里面的想法还真多啊,哈哈,要是我讲就没有能怎么生动.... --------------------编程问答-------------------- 路过 --------------------编程问答-------------------- 呵呵 这个还真得搞懂了 要不以后麻烦。。。。 --------------------编程问答--------------------
这个回复很贴切 --------------------编程问答-------------------- new是创建一个新的实例对象。 --------------------编程问答-------------------- datatable dt;//声明一个dt 没有实例化。只占4个字节
dt=new datatable() ;//实例化一个datatable ,会调用datatable的构造函数
补充:.NET技术 , C#