日期:2014-05-17  浏览次数:21017 次

一个关于新建类的问题
小弟是新手,想请问各位大神下面两段代码为什么是等效的

DataSet ds = new DataSet();
            DataTable dt = new DataTable("Person");
            ds.Tables.Add(dtPerson);


   DataSet ds = new DataSet();
            DataTable dt = ds.Tables.Add("Person");


为什么在新建DataTable对象的时候,可以不用new一个新的对象出来?
对象

------解决方案--------------------
为什么是等效的? Add()方法重载,根据各自API描述,其行为各异,但结果相同。比如,一个吃水里,一个吃果汁。结果拉出来的,都是屎。

DataTable dt = ds.Tables.Add("Person"); 为什么在新建DataTable对象的时候,可以不用new一个新的对象出来? 很明显,在Add(string dtName) 方法里,它已经帮你new了一个新对象,如果你去看.net源码(),就会看到有new一个新对象的代码。不要告诉我,你不知道怎样去.net framework源码。 
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

为什么是等效的? Add()方法重载,根据各自API描述,其行为各异,但结果相同。比如,一个吃水里,一个吃果汁。结果拉出来的,都是屎。

DataTable dt = ds.Tables.Add("Person"); 为什么在新建DataTable对象的时候,可以不用new一个新的对象出来? 很明显,在Add(string dtName) 方法里,它已经帮你new了一个新对象,如果你去看.net源码(),就会看到有new一个新对象的代码。不要告诉我,你不知道怎样去.net framework源码。 


 但是你怎么解释这个呢 ?    DataRow dr = ds.Tables[0].Rows[0];   难道这个也有重写new 对象?


很明显,这不是新建什么对象,这是获取一个已经存在的对象。根据API你可以知道一切。
------解决方案--------------------
Tables.Add()实际上是先new了再Add
------解决方案--------------------
重载的方法而且,.Net dll内部也是先new了然后再add,最后返回引用给你的
你可以用reflector查看源码