6 理解值和引用.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6 理解值和引用.ppt

6. 理解值和引用 6 值类型与引用类型 第2课介绍了C#基本数据类型(如int, double, decimal), 第5课介绍了如何声明类,及如何使用new关键字创建对象。本课主要基本数据类型与类类型的区别: 理解值类型与引用类型的区别 使用ref和out关键字,修改类方法实参的传递方式 理解装箱(boxing)与拆箱(unboxing) 6.1 栈和堆 程序运行时,它的数据必须存储在内存中。 数据的类型决定了: 需要多大的内存? 存储在什么地方? 如何存储? 运行中的程序,使用两个内存区域来存储数据: 栈(Stack) 堆(Heap) 6.1.1 栈(Stack) 系统接管所有的栈操作 栈是一个内存数组,是一个后进先出(LIFO: Last In First Out)的数据结构 栈存储以下几种形式的数据: 某些类型变量的值 程序当前的运行环境 传递给方法的参数 栈分配空间的例子 6.1.2 堆(Heap) 堆是一块内存区域,在堆里可以分配大块内存用于某类型的数据对象。 堆里的内存可以任意的存入和移除。 堆内存的分配与回收 堆里的内存使用new操作符来分配。 堆里的数据删除由垃圾回收器(GC, Garbage Collector)来进行 堆分配空间的例子 堆分配空间的例子 6.2 值类型与引用类型 数据类型被分为两种:值类型和引用类型 值类型只需要一段单独的内存,用于存储实际的数据。 引用类型需要两段内存: 第一段用于存储数据,它总是位于堆中 第二段是一个引用,指向数据在堆中的存放位置 6.2 值类型与引用类型 如果数据是另一个类型(struct或class)的成员 引用类型对象的数据,始终存放在堆中 值类型数据,或引用类型数据的引用部分,可以存放在堆中,也可以存放在栈中,依实际环境而定。 6.2 C#类型的分类 讨论 讨论 6.3 值类型或引用类型作为方法的参数 6.3.1 使用引用参数(ref) 6.3.1 使用引用参数(ref) 使用引用参数时,必须在方法的声明和调用时,都使用ref关键字。 实参必须是变量,在用作形参前必须被赋值。 6.3.2 使用输出参数(out) 如果方法的实参,希望在调用前不需要作初始化操作,而将初始化操作放在方法内部进行,可以使用输出参数(out) 6.3.2 使用输出参数(out) 使用输出参数时,必须在方法的声明和调用时,都使用out关键字。 实参必须是变量。 6.4 理解null值与可空类型 引用类型可为null值,值类型不可取值为null值 所有引用类型都可赋值为null MyInt aint = null; 引用类型为空时,不能使用它的内部成员 例如下面的语句是错误的: aint.MyValue = 100; 值类型只能该值类型范围内取值,不能取值为null; int bint = 200; 下面语句会报错: bint = null; 6.4.1 可空类型 当数据库表中的某列没有赋以确定的值时,该列可取值为null值。 为与数据库中的类型对应,C# 3.0中引入了可空类型。 可空类型的基类型必须为值类型。 6.4.2 可空类型与值类型的转换 int? c1 = null, c2 = 100; int d1 = 10, d2 = 20; 可以将值类型变量赋给可空类型 c1 = d1; 但不可以将可空类型直接赋值给值类型,如 d1 = c2; 将可空类型直接赋值给值类型时,需要使用强制类型转换:(可空变量为null时,类型转换会引发异常) d1 = (int)c2; 6.4.3 可空类型的属性 HasValue 只读,判断可空类型是否包含真正的值(即不是null) Value 只读,获取可空变量的值。 可空变量为null时,获取该属性值时会出错 6.4.4 可空类型的运算 值类型运算符(如+,*等) 如果有一个操作数为空,这些运算符将产生一个空值; 否则运算符将使用包含的值来计算结果。 6.4.4 可空类型的运算 比较运算符 如果其中一个可空类型为 null,则比较结果将始终为 false。 6.4.4 可空类型的运算 ??运算符 可空类型分配给非可空类型时返回的默认值。 6.5 System.Object类(object类型) object类型 在C#中,object类是所有其它类(包括值类型和引用类型)的基类 换句话说,所有类型数据都可以放在obecjt对象中 值类型数据放到obejct对象中,称为装箱(Boxing) 将对象类型的变量转换为值类型的过程称为拆箱(UnBoxing) 6.6 装箱(Boxing) 在C#中,所有类型都是直接或间接从object继承的。可以将任何类型的值赋给object类型的变量。将值类型的变量

文档评论(0)

guan_son + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档