- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第03讲_类型与结构
C#.NET编程技术 第03讲 对象与类型 提纲 值类型与引用类型 类与结构 Object类型 String类型 部分类 静态类 提纲 值类型与引用类型 类与结构 Object类型 String类型 部分类 静态类 值类型与引用类型 什么叫值类型? 栈上分配内存 值传递 什么叫引用类型? 堆上分配内存 引用传递 重要概念:值传递与引用传递 对值类型的理解 值类型在栈内存储值 值类型就是压入栈的一个数字 值类型作为形参时,是值传递 将栈中的数值复制一份,在函数内使用 对函数内拷贝的任何改变,不影响原变量 值类型 对引用类型的理解 引用类型变量的值存储在堆上 引用类型变量在栈上保存一个“引用” 可以理解成一个指向堆上变量实体所在地址的指针 引用类型作为形参时,是传递的是引用 将栈中的“引用”值复制一份给形参 函数内对引用类型变量的改变,会影响堆上的值 因为函数内外的多个“引用”指向的是堆上的同一块空间 引用类型 值类型与引用类型的小结 栈中: 值类型:保存值 引用类型:保存对堆上对象的引用 堆中: 值类型:不使用 引用类型:保存对象的值 哪些是值类型?哪些是引用类型? 值类型: 整数、浮点数、枚举、结构、DateTime int/uint, char, enum, struct, DataTime 引用类型:类的实例 一般地,把“类”叫做对象 Object类是引用类型,也是所有其他类型的基类 .NET是完全面向对象的,因此必然有个最基的类 这个最基的类object,是引用类型的。 什么时候使用值类型??? 1)当类型是一个十分简单的类型,其中没有成员会修改类型的任何实例字段??? 2)类型不需要从其他任何类型继承??? 3)类型不会派生出其他任何类型??? 4)类型的实例较小??? 5)类型不作为方法参数传递,也不作为方法的返回类型使用??? 6)引用类型可以包含null值,值类型不能(可空类型功能允许将null赋给值类型); 见实例zhiyinyong 装箱与拆箱 把值类型变量,赋给引用类型实例? 在堆上分配空间 把变量值从栈上复制到堆上 装箱:box 把引用类型实例,转换为值类型变量? 把值从堆上复制到栈上 拆箱:unbox 装箱 可空与不可空 值类型是不可空的 即:不能给值类型的变量赋值为null 原因:值类型变量就是栈上的一段内存空间,里面必须有个值 引用类型是可空的 即:可以给引用类型变量赋值为null 此时,引用类型变量在栈上保存的“引用”,其值为0 可以理解为一个空指针 可空值类型 少数时候,必须要求可以给值类型赋null 值类型后加?,可空值类型 int? i = null; 可空值类型的实质,是一个结构体 int m = null; 错 int? n = null; 对 提纲 值类型与引用类型 类与结构 Object类型 String类型 部分类 静态类 C#类与结构 C#类 字段 属性 方法 内嵌类型 C#结构 与类一样 值类型 不能继承 关于字段 字段应总是私有的 对字段的读写,使用相应的属性 字段宜以’_’开头以示区别 不再推荐m_iValule这种形式 关于属性 什么时候用到属性? 对字段的读写操作 看上去像是在读写一个量的操作 处理速度快的操作 属性的命名 首字母大写的驼峰方式,方法也是如此 Name, MaxAvailableLength 怎样使用属性 回顾C++的习惯 私有成员变量 两个公共方法,用于读写 怎样使用属性(续) C#本质是一样的 合并读写为同一个 属性的实质就是两个方法 这两个方法都是内联的,不必(也不能)在C#中使用inline关键字 属性本质上就是方法 只读和只写属性 可以将属性定义成只读或只写的 只使用get或set二者之一 C#方法 C#中没有全局函数,只有类方法 “函数”、“方法”两个术语,在C#中同义 声明方式与C++、Java相同 函数体定义不再分离 因此,C#中没有.h文件 C#方法的声明与C++不同点 C++ 声明和函数定义分离 访问修饰符单独放 C# 函数体与声明同在 访问修饰符放在每个方法之前 C#方法的参数传递 与参数类型有关 值类型参数按值传递 应用类型按引用传递 ref关键字 强制值类型按引用传递 函数中对该参数的修改会影响外部 输出参数 所有传递给函数的参数必须首先初始化 输出参数除外 out关键字 必须在函数内赋值 C#不允许默认参数 同一个方法多个签名——重载 构造函数 多个构造函数可以相互调用 this关键字 派生类的构造函数应首先调用基类构造函数 base关键字 静态构造函数 用于初始化类的静态成员 程序集加载时由CLR调用 只能访问静态成员 不能带参数 不需访问修饰符 C#结构 定义上与类基本相同 字段 属性 方法 结
文档评论(0)