小弟是新手,想请问各位大神下面两段代码为什么是等效的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一个新的对象出来?对象

解决方案 »

  1.   

    为什么是等效的? Add()方法重载,根据各自API描述,其行为各异,但结果相同。比如,一个吃水里,一个吃果汁。结果拉出来的,都是屎。DataTable dt = ds.Tables.Add("Person"); 为什么在新建DataTable对象的时候,可以不用new一个新的对象出来? 很明显,在Add(string dtName) 方法里,它已经帮你new了一个新对象,如果你去看.net源码(),就会看到有new一个新对象的代码。不要告诉我,你不知道怎样去.net framework源码。 
      

  2.   


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

  3.   


     但是你怎么解释这个呢 ?    DataRow dr = ds.Tables[0].Rows[0];   难道这个也有重写new 对象?很明显,这不是新建什么对象,这是获取一个已经存在的对象。根据API你可以知道一切。
      

  4.   


     但是你怎么解释这个呢 ?    DataRow dr = ds.Tables[0].Rows[0];   难道这个也有重写new 对象?很明显,这不是新建什么对象,这是获取一个已经存在的对象。根据API你可以知道一切。这个API去哪儿看?
      

  5.   

    这就是C#中值类型 和引用类型的相关概念吧  
    1 DataTable dt ;=>就是声明一个dt 为DataTable类型的一个引用 dt类似C++中的指针 此时dt未指向任何       
      

  6.   


     但是你怎么解释这个呢 ?    DataRow dr = ds.Tables[0].Rows[0];   难道这个也有重写new 对象?很明显,这不是新建什么对象,这是获取一个已经存在的对象。根据API你可以知道一切。这个API去哪儿看?Reflector或者ILSpy++貌似是这个名字。
      

  7.   

    Tables.Add()实际上是先new了再Add
      

  8.   

    用嘴说   就是往dataset中添加一个叫做“Person”的datatable  当然一样了
      

  9.   

    重载的方法而且,.Net dll内部也是先new了然后再add,最后返回引用给你的
    你可以用reflector查看源码
      

  10.   

    去看Add(string)的方法,里面有new table