- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C#.NET编程技术 第三讲 运算符与类型强制转换 内容提要 C#运算符 值类型与引用类型的相等比较 运算符重载 基本数据类型间的转换 引用类型间的转换 C#的运算符 运算符的严格检查 ‘=’和’==’的编译器检查 if(value = 1)这样的语句会导致编译出错 整数不能再作为逻辑真假 0和false,1和true不能再通用 与指针相关的’*’、 ’’、 ’-’只能在不安全代码中使用 sizeof不再提倡使用,也只能在不安全代码使用 基本数据类型长度确定 集合数据类型,都有成员字段保存自身的长度 checked和unchecked运算符 检查变量是否溢出 标记为checked的代码段,运行时会对溢出代码报错 默认为unchecked 可以在编译时设置编译选项:/checked来对全部代码进行溢出检查 typeof运算符 获得表示某个特定类型的System.Type对象 typeof(int),返回表示int的System.Type对象 有关System.Type,在讲述反射时详述 is运算符 判断某个实例是否是某种类型 或是否由该类型派生的类型 as 运算符 将变量转换为指定的类型 如果不能转换,则返回null 可空值类型对运算的影响 算式中有一个值是null,则结果是null int? result = 1 + 2 * 4 – null; // result=null null和非null值参与的逻辑比大小,结果都是null 空结合运算符 为方便可空类型的使用而设计 左值为空,则运算结果为右值;否则为左值 值类型与引用类型的相等比较 System.Object定义了三个比较方法 public virtual bool Equals(object obj) public static bool Equals(object objA, object objB) public static bool ReferenceEquals(object objA, object objB) 加上’==’运算符,一共四个 static bool ReferenceEquals(object objA, object objB) object的静态方法 比较两个引用类型是否指向同一实例 如果是值类型,则总是false 值类型的box和unbox object是引用类型,int是值类型 调用object.ReferenceEquals (i, j ),必然需要将值类型int的变量转为引用类型object的变量 因所有类型继承自object,这个转换隐式成立 如何转换? 值类型的box和unbox 值类型的ReferenceEquals恒为false static Equals(object objA, object objB) object的静态方法 两个都是null,返回true 有一个是null,返回false 两个都不是null,调用objA.Equals(objB) virtual Equals(object obj) 虚函数,可以在任何类型中重载 任何类型都派生自object 比较当前对象与obj是否相等 object.Equals(object obj) 事实上是执行: 即仍为比较两个引用是否指向同一实例 重写 virtual bool Equals(object obj) 可以改写“相等”的定义 System.ValueType就做了重写 相等比较运算符“==” 对于内置值类型,直接比较值 int, byte, short, long, float, double等 必要时会做隐式类型转换 对于引用类型,比较引用 同于ReferenceEquals 可以重载“==”运算符,以实现定制的比较 运算符重载 改变运算符含义和计算方式 运算符本质上是个函数 int a = b + c 功能和效果上等同于: int a; a = int.Add(b, c) 使用运算符,使得代码更为清晰直观 C#只定义了基本值类型的各种运算 +-*/, == != …… 对于自定义类型,可以重载运算符 如同定义了一个方法 对类、结构,都可以重载符合自己要求的运算符 与C++的不同 +=、-=等运算符不必重载 +=实际上是两个步骤:相加和赋值 因此重载了+,也就重载了+= C++不是这样,+和+=是两个运算符 赋值运算符‘=’不能重载 值类型是复制值,引用类型是复制引用 C++可以重载以实现自定义赋值 赋值的进一步讨论 结构实例的赋值? 结构实例的赋值,是浅表复制 浅表复制:值类型复制值,引用类型复制引用 object. MemberwiseClone() 实现对引用类型变量的浅表复制 比较运算符的重载 比较运算符全都应返回bool == !=
文档评论(0)