信息管理与信息系统专业 3.泛型 任课教师:吕雅丽
信息管理与信息系统专业 任课教师:吕雅丽 3. 泛型
本章内容 泛型的含义 如何使用. NET Framework提供的一些泛型类 如何定义自己的泛型 变体如何与泛型一起工作
本章内容 泛型的含义 如何使用.NET Framework提供的一些泛型类 如何定义自己的泛型 变体如何与泛型一起工作
3.1泛型的含义 基本集合类(比如 ArrayList)是没有类型化的,需要把 ob ject项转 换为集合中实际存储的对象类型,类型转换中容易导致异常。 可以定义强类型化的集合类,即定义派生于 Collect ionBase的集合 类(比如上一章的 An i mals集合类),其拥有自己的方法。 每创建一个类,需要类实例集合时需要: 使用已有的集合类,该集合类可以包含新创建的类类型成员; 或者,创建一个新的集合类。 ■简化这一过程可以使用泛型类,集合类特别适合定义成 泛型类。 ■泛型可以是泛型类、泛型接口、泛型方法等
3.1 泛型的含义 基本集合类(比如ArrayList)是没有类型化的,需要把object项转 换为集合中实际存储的对象类型,类型转换中容易导致异常。 可以定义强类型化的集合类,即定义派生于CollectionBase的集合 类(比如上一章的Animals集合类),其拥有自己的方法。 每创建一个类,需要类实例集合时需要: 使用已有的集合类,该集合类可以包含新创建的类类型成员; 或者,创建一个新的集合类。 简化这一过程可以使用泛型类,集合类特别适合定义成 泛型类。 泛型可以是泛型类、泛型接口、泛型方法等
31使用泛型 ■值类型与引用类型的一个重要区别是:值类型必须包含 个值,不能使用未赋值的变量。引用类型可以是nu|。 有时让值类型为空是很有用的,尤其是处理数据库数据 ■泛型使用 System.№ ulab|e类型提供了使值类型为空 的方式。格式: System.Nu||ab|e变量名; 例如: System. Nul lab leintA; intA=nul I
3.1 使用泛型 值类型与引用类型的一个重要区别是:值类型必须包含 一个值,不能使用未赋值的变量。引用类型可以是null。 有时让值类型为空是很有用的,尤其是处理数据库数据 时。 泛型使用System.Nullable类型提供了使值类型为空 的方式。格式: System.Nullable 变量名; 例如:System.Nullable intA; intA=null;
311可空类型 可以使用属性 Hasvalue判断其是否有值。 例如: System. NullableintA; intA=nuli: intA=8 if (intA Has Value) I ■可以使用属性Vaue查看可空类型的值。如果 Hasa|ue是 false,访问 Value属性会抛出异常 简化写法: int? intA
3.1.1 可空类型 可以使用属性HasValue判断其是否有值。 例如:System.Nullable intA; intA=null; intA=8; if(intA.HasValue) { … } 可以使用属性Value查看可空类型的值。如果HasValue是 false,访问Value属性会抛出异常。 简化写法: int?intA;
1、运算符和可空类型 对于可空类型,简单类型的运算符和类型转换,均使用。 int? op1= 5 int? result=op1*2;正确 int? op1 =5 int resu|t=op1*2;错误 int? op1=5 int result=(int)op1*2;正确 int? op1=5 int result=op1. Value*2;正确
1、运算符和可空类型 对于可空类型,简单类型的运算符和类型转换,均使用。 int? op1 = 5; int? result = op1 * 2; 正确 int? op1 = 5; int result = op1 * 2; 错误 int? op1 = 5; int result = (int)op1 * 2; 正确 int? op1 = 5; int result = op1.Value * 2; 正确
2、??运算符 ?运算符称为空合并运算符,是一个二元运算符 op1 ? op2 等价于op1=nu|l?0p2:op1 ●它是一种提供默认值的便捷方式 int? op1 nul I int result =op1 *2?? 5
2、??运算符 ??运算符称为空合并运算符,是一个二元运算符。 op1 ?? op2 等价于 op1==null ? Op2 : op1 它是一种提供默认值的便捷方式。 int? op1 = null; int result = op1 * 2 ?? 5;
3、?运算符 ■?.运算符称为空条件运算符,有助于简化空检查的代码。 public static bool operator ==(Card card1, Card card2) =>(card1?. suit = card2?. suit)&&(card1? rank = card2? rank)
3、?.运算符 ?.运算符称为空条件运算符,有助于简化空检查的代码
4、使用可空类型 创建一个类 Vector,表示极坐标的矢量(包含一个表示大小的值和 一个方向的角度)
4、使用可空类型 创建一个类Vector,表示极坐标的矢量(包含一个表示大小的值和 一个方向的角度) r 𝜃 x y
4、使用可空类型 ■创建一个类 Vector,表示极坐标的矢量(包含一个表示大小的值和 个方向的角度) class vector publ ic de publ ic doub le? Theta = nul I publ ic double? ThetaRadi ans get i return Theta Math PI/ 180.0 publ ic Vector (double? r, double? theta if(r<o theta += 180 theta theta 360 Theta theta
4、使用可空类型 创建一个类Vector,表示极坐标的矢量(包含一个表示大小的值和 一个方向的角度)