DataSet ds; 建立一个DataSet型的引用 new DataSet(); 在托管堆中生成一个DataSet的实例 DataSet ds = new DataSet(); 建立一个DataSet型的引用,然后在堆中生成一个实例,然后让这个引用指向那个实例。
DataSet ds;中的ds是否对应有具体的一个实例,与C++有何不同?
c#和c++当然不同了; c++中: A a; //在栈上为a分配空间,并调用a的构造函数 new A(); // 在堆上为a分配空间,并调用a的构造函数 c#中: A a; //只是声明一个引用,并不为a分配空间 new A(); //在堆上为a分配空间,并调用a的构造函数;在c#中除了普通数据类型,都是在堆上 //建立对象,然后使用GC回收
当然有区别了 DataSet ds;只是申明了一个句柄,而并没有开辟内存空间。
DataSet ds = new DataSet();因为使用了new语句,所以已经在托管堆上开辟了一个内存空间。
new DataSet(); 在托管堆中生成一个DataSet的实例
DataSet ds = new DataSet(); 建立一个DataSet型的引用,然后在堆中生成一个实例,然后让这个引用指向那个实例。
c++中:
A a; //在栈上为a分配空间,并调用a的构造函数
new A(); // 在堆上为a分配空间,并调用a的构造函数
c#中:
A a; //只是声明一个引用,并不为a分配空间
new A(); //在堆上为a分配空间,并调用a的构造函数;在c#中除了普通数据类型,都是在堆上
//建立对象,然后使用GC回收
DataSet ds = new DataSet();因为使用了new语句,所以已经在托管堆上开辟了一个内存空间。
就是譬如说A a; 这样, 但要求这个a不是引用而是一个具体的对象实例。或者说C#里面能不能这样在栈上定义出一个对象实例来根据书本所述,C#中有一个什么装包、卸包的过程,那么这个new出来的实例如何才能把它复制出来作为另一个实例使用呢。
就是比如Table tbl = ds.Tables[0];
那么这个tbl是引用DataSet中的Table对象还是有了自己的一个实例?如果想把DataSet中的table复制出来,如何处理;若仅仅是引用DataSet中的table又如何处理呢?
1.值类型 变量的地址便是数据存储的位置(int char ...)
2.引用类型 变量的里存的是相应对象的内存块地址(类的实例)
再说了,这是面向对象的很重要的一个东西~~
只是声明,在内存中不为它分配空间;
Dataset ds=new Dataset();
实例化,在内存中分配空间给它;
Dataset ds=new Dataset();=============================
Dataset ds;ds=new Dataset;