




已阅读5页,还剩61页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二讲C 语言之数据类型之二 3 1值类型3 2引用类型3 3类型转换 第3章C 语言之数据类型 3 2 1类3 2 2接口3 2 3代表3 2 4数组 3 1C 数据类型之引用类型 类 1 类的定义 类是一组具有相同数据结构和相同操作的对象的集合 简单地说 类是对一系列具有相同性质的对象的抽象 3 2 1类 3 2C 数据类型之引用类型 2 举例 现实中的类 车 人 抽象的概念和继承的概念 特性 方法 事件等概念简介 类 3 2 1类 3 C 中的类 类也是一种数据类型 或称它为类类型 3 2C 数据类型之引用类型 4 类的构成 类由成员构成 这些成员包括 常数字段方法属性事件索引器运算符实例构造函数析构函数静态构造函数和嵌套类型声明 类 3 2 1类 5 类的声明 书上的例子 p3 6 3 2C 数据类型之引用类型 publicclassContact publicstringm name publicintm age publicstringm telephone publicstructAddress publicstringm city publicstringm street publicintm number publicAddressm address 类 3 2 1类 3 2C 数据类型之引用类型 classContact publicstringm name publicintm age publicstringm telephone publicstructAddress publicstringm city publicstringm street publicintm number publicAddressm address 6 类变量及实例化 Contactc1 newContact 类 3 2 1类 7 类的成员赋值 3 2C 数据类型之引用类型 classContact publicstringm name publicintm age publicstringm telephone publicstructAddress publicstringm city publicstringm street publicintm number publicAddressm address classClassSample publicstaticvoidMain Contactc1 newContact c1 m name MikeOwen c1 m age 24 c1 m telephone Unknown c1 m address m city 利物浦 c1 m address m street 安菲尔德 c1 m address m number 10 Console WriteLine c1 m address m city Console WriteLine c1 m address m street Console WriteLine c1 m address m number 类 3 2 1类 8 类继承的声明 3 2C 数据类型之引用类型 classContact publicstringm name publicintm age publicstringm telephone publicstructAddress publicstringm city publicstringm street publicintm number publicAddressm address classColleague Contact publicstringm Fax 总结一下 类的继承如何定义 类 3 2 1类 8 类继承的单继承 3 2C 数据类型之引用类型 classContact classContact1 classColleague Contact Contact1 publicstringm Fax 错啦 接口 面向组件的开发 组件编程技术 3 2 2接口 3 2C 数据类型之引用类型 接口 接口 面向组件的开发 组件编程技术 接口 组件与接口 1 接口描述了组件对外提供的服务 2 在组件和组件之间 组件和客户之间都是通过接口进行交互的 接口 接口的特点 1 组件接口必须是能够自我描述的 这意味着组件接口应该不依赖于具体的实现 将实现和接口分离 彻底消除了接口的使用者和接口的实现者之间的耦合关系 增强了信息的封装程度 同时 这也要求组件接口必须使用一种与组件实现无关的语言 目前组件接口的描述标准是IDL语言 2 尽可能地保持接口不变 由于接口是组件之间的协议 因此组件的接口一旦被发布 组件生产者就应该尽可能地保持接口不变 任何对接口语法或语义上的改变 都有可能造成现有组件与客户之间的联系遭到破坏 3 每个组件都是自主的 有其独特的功能 只能通过接口与外界通信 当一个组件需要提供新的服务时 可以通过增加新的接口来实现 不会影响原接口已存在的客户 而新的客户可以重新选择新的接口来获得服务 接口 接口的声明 interfaceinterfaceIControl voidPaint usingSystem interfaceIControl voidPaint interfaceITextBox IControl voidSetText stringtext interfaceIListBox IControl voidSetItems string items interfaceIComboBox ITextBox IListBox 总结一下 接口如何定义 接口也有继承 接口的继承如何定义 接口 类继承与接口 interfaceITelephone voidDialNumber interfaceIFax ITelephone voidSendFax voidReceiveFax classContact ITelephone classColleague Contact IFax 谁来总结一下 接口 类继承与接口 总结 一个正例 classContact ITelephone publicvoidDialNumber classColleague Contact IFax publicvoidSendFax publicvoidReceiveFax interfaceITelephone voidDialNumber interfaceIFax ITelephone voidSendFax voidReceiveFax 总结 一个正例 代表 1 定义2 为什么引入代表 3 继续保留指针 细致入微的考虑 4 类型安全的代表5 代表相当于一类方法 函数 的指针6 代表的使用 一般步骤及例子分析7 代表的使用步骤进一步的分析8 代表与事件9 真正的例子 代表 1 代表 delegate 也有的书将它翻译成委托 也有的翻译成代理 它才是C 新引进的新概念之一 也是最有特色的最为强大的功能之一 2 C 引入代表 delegate 就是为了解决C和C 中指针滥用所带来的危害 可以这样说 一个地道的C 程序员 完全可以不用指针就能完成C和C 中使用指针所能完成的任务 3 当然 若您恋恋不舍指针 甚至没有指针时就不知如何编程 没有关系 C 还是还会忘记您的 代表 4 与指针不同 代表在C 是类型安全的 强类型 5 代表 与C C 相比 代表相当于一类方法 函数 的指针 但仍有很大的差别 C语言中 指向函数的指针 main intmax int int int p inta 6 b 7 c 0 p max c p a b 代表 相当于一类方法的指针的类型 代表 6 代表的使用分为三个步骤 定义实例化调用 代表 6 代表的使用分为三个步骤 定义 实例化 调用 代表的定义 publicdelegateintD1 stringtext publicdelegatevoidD2 C语言中 指向函数的指针 main intmax int int int p inta 6 b 7 c 0 p max c p a b 仔细注意 它有参数表 代表 6 代表的使用分为三个步骤 定义 实例化 调用 代表的定义 publicdelegateintDelgate1 stringtext publicdelegatevoidDelgate2 仔细注意 它有参数表 语义是什么 代表 6 代表的使用分为三个步骤 定义 实例化 调用 代表的定义 publicdelegateintDelgate1 stringtext publicdelegatevoidDelgate2 仔细注意 它有参数表 代表的实例化 Delgate1d1 newDelgate1 ClassA DialNumber Delgate2d2 newDelgate2 ClassB M1 呀 代表的实例化 有点怪呀 代表 6 代表的使用分为三个步骤 定义 实例化 调用 代表的定义 publicdelegateintDelgate1 stringtext publicdelegatevoidDelgate2 代表的实例化 Delgate1d1 newDelgate1 ClassA DialNumber Delgate2d2 newDelgate2 ClassB M1 语义 publicClassA intDialNumber stringstr 仔细注意 它有参数表 仔细注意 它有参数表 语义是什么 代表 6 代表的使用分为三个步骤 定义 实例化 调用 代表的定义 publicdelegateintDelgate1 stringtext publicdelegatevoidDelgate2 代表的实例化 Delgate1d1 newDelgate1 ClassA DialNumber Delgate2d2 newDelgate2 ClassB M1 代表的调用 publicClassA Delgate1d1 newDelgate1 DialNumber intx strings abcd x d1 s 代表的调用 publicdelegatevoidTelDelegate publicdelegatevoidFaxDelegate stringText publicclassDelegateSample publicstaticvoidMain Contactc1 newContact Colleaguec2 newColleague TelDelegatetd newTelDelegate c1 DialNumber td FaxDelegatefd newFaxDelegate c2 SendFax fd Hello fd newFaxDelegate c2 ReceiveFax fd ThisisafaxFromShanghai classContact ITelephone publicvoidDialNumber classColleague Contact IFax publicvoidSendFax stringtext publicvoidReceiveFax stringtext 代表 8 代表与事件 事件驱动编程 7 代表的使用分为三个步骤 再思考定义实例化调用 谁来定义 程序员 系统 publicdelegatevoidEventHandler objectsender System EventArgse publicclassButton publiceventEventHandlerClick publicvoidReset Click null 事件 代表 8 代表与事件 事件驱动编程 usingSystem publicclassForm1 publicForm1 Button1 Click newEventHandler Button1 Click ButtonButton1 newButton voidButton1 Click objectsender EventArgse Console WriteLine Button1wasclicked publicvoidDisconnect Button1 Click newEventHandler Button1 Click publicdelegatevoidEventHandler objectsender System EventArgse publicclassButton publiceventEventHandlerClick publicvoidReset Click null 代表 9 真正的代表 delegate 例子 实例方法和表态方法的代理 usingSystem namespaceMydelegate Sample1 publicdelegateintMyDelegate 声明一个代表publicclassMyClass publicintInstanceMethod Console WriteLine 调用实例方法 return5 publicstaticintStaticMethod Console WriteLine 调用静态方法 return0 publicclassTest staticpublicvoidMain MyClassp newMyClass MyDelegated newMyDelegate p InstanceMethod d 调用非静态方法d newMyDelegate MyClass StaticMethod d 调用静态方法Console ReadLine 代表 10 实验 分析 运行和改进p3 8例子 3 2 4数组 3 2C 数据类型之值类型 C 中的数组 希望大家自学一下 3 2 4数组 3 2C 数据类型之值类型 自学要点提示 数组是一种什么数据类型 定义 特点 应用与C C JAVA数组的异同点 申明 初始化 引用等 它的基类 主要属性 方法多维数组的特点新概念 不规则数组 也叫锯齿形数组 也叫 交错形数组 它的特殊作用 不要把交错形数组与多维数组弄混 多维数组是维数大于 的数组 而交错形数组是元素是数组的数组 分析P3 10的例子 改进它 3 2 4数组 3 2C 数据类型之值类型 多维数组 要点 多维数组 int array1 char carr char carr cabc Object arr Obj Contact Contacts 数组的元素类型 值类型 数组的元素类型 Contact是类 3 2 4数组 3 2C 数据类型之值类型 多维数组 要点 多维数组 int array1 char carr char carr cabc Object arr Obj Contact Contacts 秩说明符 维度分隔符 3 2 4数组 3 2C 数据类型之值类型 2 数组初始化 要点 初始化 int MyArray newint 1 2 3 4 5 6 7 8 也可以初始化数组但不指定级别 char MyCharArray M y C h a r A r r a y int MyIntArray 1 2 3 12 45 1 int myArray 1 2 3 4 5 6 7 8 3 2 4数组 3 2C 数据类型之值类型 3 数组元素访问 要点 元素访问 usingSystem classTest staticvoidMain int arr newint 5 for inti 0 i arr Length i 通过Length访问数组的元素个数arr i i i 数组初绐化 每一个元素的值是其下标值的平方数 for inti 0 i arr Length i 遍历Console WriteLine arr 0 1 i arr i 3 2 4数组 3 2C 数据类型之值类型 3 数组元素访问 要点 元素访问 usingSystem classTest staticvoidMain int arr newint 5 for inti 0 i arr Length i 通过Length访问数组的元素个数arr i i i 数组初绐化 每一个元素的值是其下标值的平方数 for inti 0 i arr Length i 遍历Console WriteLine arr 0 1 i arr i arr 0 0arr 1 1arr 2 4arr 3 9arr 4 16 3 2 4数组 3 2C 数据类型之值类型 要点 不规则元素访问 classMultiArray publicstaticvoidMain int b newint 3 b 0 newint 4 b 1 newint 5 b 2 newint 4 Console WriteLine 不规则数组 Console WriteLine b Length Console WriteLine b GetLength 0 调用将会出错 Console WriteLine b GetLength 1 Console WriteLine b 0 Length 3 2 4数组 3 2C 数据类型之值类型 publicstaticvoidMain int b newint 3 b 0 newint 4 b 1 newint 5 b 2 newint 4 Console WriteLine 不规则数组 Console WriteLine b Length Console WriteLine b GetLength 0 调用将会出错 Console WriteLine b GetLength 1 Console WriteLine b 0 Length for inti 0 i b Length i Console WriteLine b i Length 要点 不规则元素访问 3 2 4数组 3 2C 数据类型之值类型 数组是一种什么数据类型 定义 特点 应用与C C JAVA数组的异同点 申明 初始化 引用等 它的基类 主要属性 方法多维数组的特点新概念 不规则数组 也叫锯齿形数组 也叫 交错形数组 它的特殊作用 不要把交错形数组与多维数组弄混 多维数组是维数大于 的数组 而交错形数组是元素是数组的数组 分析P3 10的例子 改进它 要点 多维数组 类型转换 3 3类型转换 隐式转换 显式转换 强制类型转换 隐式数值转换隐式枚举转换隐式引用转换隐式常量表达式转换转换 显式数值转换显式枚举转换显式引用转换 类型转换 3 3类型转换 3 3 1数值转换3 3 2枚举转换3 3 3引用转换3 3 4装箱和拆箱转换3 3 5转换检查 数值转换 3 3 1数值转换 1 隐式数值转换 3 3类型转换 数值转换枚举转换引用转换装箱和拆箱转换转换检查 inti 10 longX i bytex 16 ushorty x y 65535 floatz y 数值转换 3 3 1数值转换 1 隐式数值转换 3 3类型转换 数值转换枚举转换引用转换装箱和拆箱转换转换检查 usingSystem classTest publicstaticvoidMain bytex 16 Console WriteLine x 0 x ushorty x Console WriteLine y 0 y y 65535 Console WriteLine y 0 y floatz y Console WriteLine z 0 z 程序的输出将是 x 16 y 16 y 65535 z 65535 数值转换 3 3 1数值转换 1 显示式数值转换 3 3类型转换 数值转换枚举转换引用转换装箱和拆箱转换转换检查 inti 10 longl long i longl 5000 inti int l 数值转换 3 3 1数值转换 1 隐式数值转换 特点是从小类型到大类型转换 都会成功 但可能会引起精度下降 2 显式数值转换 特点是不能保证总是转换成功 可能会发生信息丢失 3 3类型转换 数值转换枚举转换引用转换装箱和拆箱转换转换检查 1 枚举类型的隐式转换 3 3类型转换 数值转换枚举转换引用转换装箱和拆箱转换转换检查 3 3 2枚举转换 0与枚举类型变量的隐式转换 枚举转换 0与枚举类型变量的隐式转换 publicenumWeekday Sunday Monday 3 Tuesday 5 Wednesday 7 classMultiArray publicstaticvoidMain Weekdayday 0 Console WriteLine day 3 3类型转换 数值转换枚举转换引用转换装箱和拆箱转换转换检查 3 3 2枚举转换 运行结果 Sunday 枚举转换 1 0与枚举类型变量的隐式转换 补充 只有一个序号为0 或是默认状态的情况下这一条才成立 publicenumWeekday Sunday 1 Monday 3 Tuesday 5 Wednesday 7 publicclassMultiArray publicstaticvoidMain Weekdayday 0 Console WriteLine day 3 3类型转换 数值转换枚举转换引用转换装箱和拆箱转换转换检查 3 3 2枚举转换 运行结果 0 枚举转换 3 3类型转换 数值转换枚举转换引用转换装箱和拆箱转换转换检查 3 3 2枚举转换 从sbyte byte short ushort int uint long ulong char float double 或decimal到任何枚举类型 从任何枚举类型到sbyte byte short ushort int uint long ulong char float double 或decimal 从任何枚举类型到任何其它枚举类型 2 显式枚举转换包括以下内容 枚举转换 3 3类型转换 数值转换枚举转换引用转换装箱和拆箱转换转换检查 3 3 2枚举转换 publicenumWeekday Sunday Monday Tuesday Wednesday publicclassEnumConversion staticvoidMain string args Weekdayday 0 Console WriteLine day day Weekday 1 错误的写法 day 1 Console WriteLine day 枚举转换 3 3类型转换 数值转换枚举转换引用转换装箱和拆箱转换转换检查 3 3 2枚举转换 枚举转换 publicenumWeekday Sunday Monday Tuesday Wednesday publicclassEnumConversion staticvoidMain string args Weekdayday 0 intx Console WriteLine day day Weekday 1 错误的写法 day 1 Console WriteLine day day Console WriteLine day x int day Console WriteLine x SundayMondayTuesday2 引用转换 1 隐式引用转换 隐式引用转换有如下几个情形 从任何引用类型到对象类型object的转换 从类类型S到类类型T的转换 只要S是T的派生类 从类类型S到接口类型T的转换 只要类S实现了接口T 从接口类型S到接口类型T的转换 其中S是T的中派生的 从元素类型为Ts的数组类型S向元素类型为Tt的数组类型T转换 这种转换需要满足下列条件 S和T只有元素的数据类型不同但它们的维数相同 Ts和Tt都是引用类型存在从Ts到Tt的隐式引用转换 从任何数组类型到System Array的转换 从任何代表类型到System Delegate的转换 从任何数组类型或代表类型到System ICloneable的转换 从空类型null到任何引用类型的转换 3 3类型转换 数值转换枚举转换引用转换装箱和拆箱转换转换检查 3 3 3引用转换 2 显式引用转换 显式引用转换包括 从object到任何引用类型 从类类型S到类类型T 其中S是T的基类 从类类型S到接口类型T 其中S不是密封类 而且没有实现T 从接口类型S到类类型T 其中T不是密封类 而且没有实现S 从接口类型S到接口类型T 其中S不是T的子接口 从元素类型为Ts的数组类型S到元素类型为Tt的数组类型T的转换 这种转换需要满足下列条件 S和T只有元素的数据类型不同 但维数相同 Ts和Tt都是引用类型 存在从Ts到Tt的显式引用转换 从System Array到数组类型 从System Delegate到代表类型 从System ICloneable到数组类型或代表类型 显式引用转换发生在引用类型之间 需要在运行时检测以确保正确 为了确保显式引用转换的正常执行 要求源变量的值必须是null或者它所引用的对象的类型可以被隐式引用转换转换为目标类型 否则显式引用转换失败将抛出一个无效类型转换 InvalidCastException 异常 3 3类型转换 数值转换枚举转换引用转换装箱和拆箱转换转换检查 3 3 3引用转换 引用转换 值类型与引用类型的转换 3 3 4装箱和拆箱 3 3类型转换 C 语言类型系统提出的两个核心概念 装箱 boxing 拆箱 unboxing 装箱和拆箱 3 3 4装箱和拆箱 装箱和拆箱机制 使得在C 类型系统中任何值类型 引用类型和object对象类型之间进行转换 我们称这种转化为绑定连接 简单地说 有了装箱和拆箱的概念 对任何类型的值来说 最终我们都可以看作是object类型 3 3类型转换 C 语言类型系统提出的一个核心概念装箱 boxing 和拆箱 unboxing 装箱和拆箱 3 3 4装箱和拆箱 publicclassBoxingSample staticvoidMain inti 10 objectobj i Boxingi 20 Console WriteLine 值类型int i 0 i Console WriteLine 引用类型object obj 0 obj 3 3类型转换 值类型int i 20引用类型object obj 10 装箱 boxing 装箱和拆箱 3 3 4装箱
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物学《遗传学基础与进化论》教学大纲
- 办公区域无线网络建设及维护合同
- 早期教育招生课件
- 早期政治制度课件
- 纪念设施课件
- 早期复级化课件
- 农业经济管理软件服务与维护合同
- 纪念刘和珍君课件
- 2025年山东省公务员录用考试申论真题模拟解析
- 员工福利协议签署文件
- 2025年职业指导师(四级)考试模拟试题汇编与模拟试题解析
- 2025年新修订《治安管理处罚法》
- 【政治 云南卷】2025年云南省高考招生统一考试真题政治试卷(含答案)
- 测听讲课的课件
- 乡镇物业安全管理制度
- 培训班老师规矩管理制度
- 起重作业安全考核试题及答案
- 炉窑公司现场管理制度
- 无人车项目计划书范文大全
- 高等教育十五五发展规划
- 股权转让及公司业绩承诺补充协议模板
评论
0/150
提交评论