C#面向对象程序设计课件郑宇军CS章节12章

上传人:E**** 文档编号:89085963 上传时间:2019-05-17 格式:PPT 页数:30 大小:719KB
返回 下载 相关 举报
C#面向对象程序设计课件郑宇军CS章节12章_第1页
第1页 / 共30页
C#面向对象程序设计课件郑宇军CS章节12章_第2页
第2页 / 共30页
C#面向对象程序设计课件郑宇军CS章节12章_第3页
第3页 / 共30页
C#面向对象程序设计课件郑宇军CS章节12章_第4页
第4页 / 共30页
C#面向对象程序设计课件郑宇军CS章节12章_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《C#面向对象程序设计课件郑宇军CS章节12章》由会员分享,可在线阅读,更多相关《C#面向对象程序设计课件郑宇军CS章节12章(30页珍藏版)》请在金锄头文库上搜索。

1、1,第12章 C# 中的泛型模式: 可空类型和迭代器,可空类型,值类型与null值,2,public class student private string name; private DateTime birthday; private bool gender; ,null,未初始化,可空类型,值类型与null值,3,public class student private string name; private DateTime birthday; private bool gender; public Student() birthday = new DateTime(1900,1,

2、1); gender = false; ,?,值类型与null值,可空类型,4,public struct IntOrNull private int value; private bool hasValue; public int Value get if (hasValue) return value; else throw new InvalidOperationException(); ,Int,Null,IntOrNull,值类型与null值,可空类型,5,Int,Null,IntOrNull,Double,Null,Double OrNull,DateTime,Null,DateT

3、ime OrNull,使用可空类型,可空类型,6,public struct Nullable private T value; private bool hasValue; public T Value get if (hasValue) return value; else throw new InvalidOperationException(); ,T,Null,TOrNull,where T : struct,可空类型,使用可空类型 Nullable,7,Nullablei1 = null; Nullablei1 = new Nullable() Nullable dt1 = Dat

4、eTime.Now;,可空类型,使用可空类型 Nullable T?,8,Nullablei1 = null; Nullablei1 = new Nullable() Nullable dt1 = DateTime.Now;,int ? i1 = null; double ? d1 = 2.5; DateTime ? dt1 = DateTime.Now; DateTime ? dt2 = new DateTime?(dt1);,可空类型,可空类型转换 隐式转换,9,int i1 = 3; int? i2 = i1;,Nullable,T,可空类型,可空类型转换 隐式转换,10,int i =

5、 3; double? d = i;,Nullable,T,S,可空类型,可空类型转换 隐式转换,11,float? f = 3.14f; double? d = f;,Nullable,Nullable,T,S,可空类型,可空类型转换 隐式转换 显式转换,12,int? i1 = new int?(3); int i2 = (int)i1;,T,Nullable,可空类型,可空类型转换 隐式转换 显式转换,13,float? f = 3.14f; int i = (int)f;,S,T,Nullable,可空类型,可空类型转换 隐式转换 显式转换,14,float? f = 3.14f; i

6、nt? i = f;,Nullable,S,T,Nullable,操作符提升,可空类型,15,Nullable: t1 op t2 = t3,T: t1 op t2 = t3,比较操作符: null = null 关系操作符: (t1/t2: null) t3=false 一般操作符: (t1/t2: null) t3=null,可遍历类型和接口 预定义类型,遍历和迭代,16,int x = 1, 3, 5, 7, 9 ; foreach (int i in x) Console.WriteLine(i); ArrayList a1 = new ArrayList(x); foreach (i

7、nt i in a1) Console.WriteLine(i); Stack s = new Stack(x); foreach (int i in s) Console.WriteLine(i);,Array: IEnumerable ArrayList: IEnumerable Stack: IEnumerable,可遍历类型和接口 预定义类型 自定义类型,遍历和迭代,17,public class Phones private string phones; ,可遍历类型和接口 预定义类型 自定义类型,遍历和迭代,18,public class Phones : IEnumerable

8、private string phones; IEnumerator IEnumerable.GetEnumerator() for(int i=0; i5; i+) if(phonesi != null) yield return phonesi; ,可遍历类型和接口 预定义类型 自定义类型,遍历和迭代,19,public class Phones : ICollection private string phones; IEnumerator IEnumerable.GetEnumerator() for(int i=0; i5; i+) if(phonesi != null) yield

9、 return phonesi; public int Count get . public void CopyToArray(Array arr, int i) . ,可遍历类型和接口 预定义类型 自定义类型,遍历和迭代,20,public class Phones : IEnumerable private string phones; public IEnumerator GetEnumerator() for(int i=0; i5; i+) if(phonesi != null) yield return phonesi; public int Count get . public

10、void CopyToArray(Array arr, int i) . ,遍历和迭代,迭代器,21,foreach (string s in phones) Console.WriteLine(s);,IEnumerator enu = phones.GetEnumerator(); while (enm.MoveNext() Console.WriteLine(enu.Current);,遍历和迭代,IEnumerator T Current bool MoveNext() void Reset(),22,遍历和迭代,迭代器,23,准备(before),MoveNext,运行(runnin

11、g),挂起(suspended),get _Curent,完成,结束,遍历结束?,开始(Start),False,True,False,True,遍历和迭代,迭代器代码,24,IEnumerator IEnumerable.GetEnumerator() for(int i = 0; i5; i+) if(phonesi != null) yield return phonesi; ,遍历和迭代,迭代器代码,25,IEnumerator IEnumerable.GetEnumerator() for(int i = 0; i5; i+) if(phonesi != null) yield re

12、turn phonesi; else yield break; ,遍历和迭代,26,迭代器代码 不能使用ref/ out参数 不能出现单独的return语句,遍历和迭代,使用多个迭代器,27,public class Phones : IEnumerable public IEnumerator GetEnumerator() . yield return . ,遍历和迭代,使用多个迭代器,28,public class Phones : IEnumerable public IEnumerator GetEnumerator() . yield return . public IEnumer

13、able EnumeratorA() . yield return . public IEnumerable EnumeratorB() . yield return . ,遍历和迭代,自我迭代,29,public class Phones : IEnumerable, IEnumerator public IEnumerator GetEnumerator() . yield return . public int Count get . public void CopyToArray(Array arr, int i) . ,30,本章习题,简述可空类型的使用场合。 将null赋值给一个可空类型变量,该类型对象是怎样初始化的? C#的迭代器功能使用了哪些关键字,它们各有什么用途? 在图书馆管理系统中实现用户和图书的遍历。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号