欢迎来到天天文库
浏览记录
ID:44194070
大小:283.00 KB
页数:40页
时间:2019-10-19
《c#6-引用类型》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、classTime{privateinthour,minute,second;publicTime(){hour=minute=second=0;}publicTime(inth){hour=h;minute=second=0;}publicTime(inth,intm){hour=h;minute=m;second=0;}publicTime(inth,intm,ints){hour=h;minute=m;second=s;}}classTest{staticvoidMain(){Timet1,t2,t3,t4;t1=newTime();t
2、2=newTime(8);t3=newTime(8,30);t4=newTime(8,30,30);}}1第六章理解引用类型C#语言程序设计河北理工大学赵爽2数据类型C#的数据类型分成两大类:一个是值类型(ValueTypes),一个是引用类型(ReferenceTypes)。所谓值类型就是一个包含实际数据的量。即当定义一个值类型的变量时,C#会根据它所声明的类型,以堆栈方式分配一块大小相适应的存储区域给这个变量,随后对这个变量的读或写操作就直接在这块内存区域进行。3值类型堆栈010堆bainta=10;intb;b=a;b=9;程序代码10
3、94一个引用类型的变量不存储它们所代表的实际数据,而是存储实际数据的引用。引用类型分两步创建:首先在堆栈上创建一个引用变量,然后在堆上创建对象本身,再把这个内存的句柄(也是内存的首地址)赋给引用变量。5引用类型堆栈null00A0堆baCara=newCar();Carb;b=a;b.Speed=150;程序代码classCar{publicintSpeed=60;publicvoidDrive();}Carat00A0Speed=6000A0Carat00A0Speed=150a.Speed现在也变为1506计算机内存组织操作系统和运行库通
4、常将用于容纳数据的内存划分为两个独立的区域,每个区域都采取截然不同的方式来进行管理。这两个区域通常称为堆栈(stack)和堆(heap)。堆栈和堆的设计目标是完全不同的。7计算机内存组织堆栈内存就像一系列堆叠越高的箱子。调用方法时,每个参数都被放入一个箱子,并将这个箱子放到堆栈最顶部。每个局部变量也同样分配到一个箱子,并同样放到堆栈最顶部。方法结束之后,它的箱子都会从堆栈中移除。publicstaticvoidMain(){intj=7,k=9;inttemp;if(j5、内存组织堆内存则像散布在房间里的一大堆箱子,而不像堆栈那样每个箱子都严格地叠置在另一个箱子上方。每个箱子都有一个标签,它标记了这个箱子是否可用。创建一个新对象时,运行库会查找一个空箱子,并把它分配给对象。对对象的引用存储在堆栈上的一个局部变量中。运行库跟踪对每个箱子的引用数量。一旦最后一个引用消失,运行库就将箱子标记为“未使用”。将来某个时候,会清除箱子里的东西,使其真正能够重用。9对象存储由同一个类实例化成的两个对象,它们的方法完全相同,仅属性可能不同。可以将不同对象的方法放在一个地方统一存储,以节省内存空间方法在第一个对象初始化时在内存中6、创建实例方法在调用时,实际上隐含传送了一个“this“this关键字我们可以简单理解成是对象在堆中的物理起始地址,所以可以this关键字引用类的当前实例(对象)。10多个类实例共享同一方法实现堆栈00A400A0堆baCara=newCar();Carb=newCar();b.Speed=150;程序代码classCar{publicintSpeed=60;publicvoidDrive(){Speed++;}}Carat00A0Drive()实现at00B0……Drivesee00B0Speed:60Carat00A4Drivesee00B7、0Speed:150b.Drive();隐含的this可以确保方法中不会调错对象数据11什么是this?堆栈00A0堆aCara=newCar();a.Drive();程序代码classCar{publicintSpeed=60;publicvoidDrive(){Speed++;}}Carat00A0Drive()实现at00B0Drive(Carthis){this.Speed++;}Drivesee00B0Speed:60this用来指代对象在堆中的地址。隐含的this用来确保Speed++命令不会调用错误的对象属性。12this用来解8、决名称相同的问题classEmployee{ ... publicvoidSetEmpName(stringname) { name=nam
5、内存组织堆内存则像散布在房间里的一大堆箱子,而不像堆栈那样每个箱子都严格地叠置在另一个箱子上方。每个箱子都有一个标签,它标记了这个箱子是否可用。创建一个新对象时,运行库会查找一个空箱子,并把它分配给对象。对对象的引用存储在堆栈上的一个局部变量中。运行库跟踪对每个箱子的引用数量。一旦最后一个引用消失,运行库就将箱子标记为“未使用”。将来某个时候,会清除箱子里的东西,使其真正能够重用。9对象存储由同一个类实例化成的两个对象,它们的方法完全相同,仅属性可能不同。可以将不同对象的方法放在一个地方统一存储,以节省内存空间方法在第一个对象初始化时在内存中
6、创建实例方法在调用时,实际上隐含传送了一个“this“this关键字我们可以简单理解成是对象在堆中的物理起始地址,所以可以this关键字引用类的当前实例(对象)。10多个类实例共享同一方法实现堆栈00A400A0堆baCara=newCar();Carb=newCar();b.Speed=150;程序代码classCar{publicintSpeed=60;publicvoidDrive(){Speed++;}}Carat00A0Drive()实现at00B0……Drivesee00B0Speed:60Carat00A4Drivesee00B
7、0Speed:150b.Drive();隐含的this可以确保方法中不会调错对象数据11什么是this?堆栈00A0堆aCara=newCar();a.Drive();程序代码classCar{publicintSpeed=60;publicvoidDrive(){Speed++;}}Carat00A0Drive()实现at00B0Drive(Carthis){this.Speed++;}Drivesee00B0Speed:60this用来指代对象在堆中的地址。隐含的this用来确保Speed++命令不会调用错误的对象属性。12this用来解
8、决名称相同的问题classEmployee{ ... publicvoidSetEmpName(stringname) { name=nam
此文档下载收益归作者所有