.net----泛型
创始人
2024-02-13 16:55:45
0

泛型

  • 泛型的基本概念
    • 集合类System. Collections. ArrayList
    • 泛型集合类System. Collection. Generic. List
    • ArrayList
    • List
  • 泛型的定义和类型参数
    • 类型参数
  • 泛型类和泛型接口
    • 泛型类
    • 泛型接口
  • 泛型结构
  • 泛型方法
  • 泛型委托和泛型事件
  • default关键字及协变和逆变
    • 协变和逆变

泛型的基本概念

集合类System. Collections. ArrayList

ArrayList list1 = new ArrayList(); //创建数组列表list1
list1.Add(3); list1.Add(105); //向数组列表list1添加元素3、5
int sum1 = 0;    //数组列表list1各元素之和,赋初值0
foreach (int x in list1) sum1 += x; //求和
Console.WriteLine(sum1);      //输出结果
ArrayList list2 = new ArrayList(); //创建数组列表list1
list2.Add(123); list2.Add("abc"); //向数组列表list2添加元素123、"abc"
int sum2 = 0;                //数组列表list2各元素之和,赋初值0
//foreach (int x in list2) sum2 += x; //求和,产生运行时异常:InvalidCastException
Console.WriteLine(sum2);     //输出结果

泛型集合类System. Collection. Generic. List

List list1 = new List(); //创建整型列表list2
list1.Add(3); list1.Add(105); //向整型列表list1添加元素3、5int sum1 = 0;    //数组整型列表list1各元素之和,赋初值0
foreach (int x in list1) sum1 += x; //求和
Console.WriteLine(sum1);     //输出结果List list2 = new List();  //创建整型列表list2
list2.Add(123);  //向整型列表list1添加整型元素123
//list2.Add("abc"); //向整型列表list1添加字符串"abc",将导致编译错误

ArrayList

  • ArrayList通用化是通过在类型与通用基类型Object之间进行强制转换来实现的
  • 强制转换以及装箱和拆箱操作都会降低性能
  • 所有项都强制转换为Object,缺少编译时类型检查,在编译时无法防止客户端代码执行非法操作

List

  • 使用List时,必须为每个实例指定其具体的数据类型
  • 编译器可以进行类型检查,从而解决了ArrayList通用化的2个主要问题,保证了程序的性能和健壮性

泛型的定义和类型参数

  • 泛型类似于 C++ 模板,通过泛型可以定义类型安全的数据结构,而无须使用实际的数据类型

  • 泛型类和泛型方法具备可重用性、类型安全和效率

  • 泛型通过泛型参数()来定义和指定特定类型进行使用

1. 在泛型类的声明中,需要声明泛型参数
2.在泛型类的成员声明中,使用该泛型参数作为通用类型
3. 在创建泛型类的实例时,则需要与泛型参数对应的实际类型

public class Stack
{int pos;T[] data = new T[100];public void Push(T obj) { data[pos++] = obj; }//进栈public T Pop() { return data[--pos]; }        //出栈
}
 Stack stack = new Stack();stack.Push(2); stack.Push(4);   //数据进栈//stack.Push("a");            //编译错误

类型参数

  • 在泛型类型定义中,必须通过指定尖括号中的类型参数来声明类型
  • 类型参数实际上只是类型占位符
  • 在创建泛型类型的实例时,必须指定尖括号中的类型(可以是编译器识别的任何类型)
GenericList list1 = new GenericList();
GenericList list2 = new GenericList();
GenericList list3 = new GenericList();

泛型类和泛型接口

泛型类

一般用于封装非特定数据类型的操作,例如集合的添加项/移除项等,与所存储数据的类型无关

在这里插入图片描述
泛型类的继承

泛型接口

泛型类共通要实现的方法、委托或事件的签名封装为泛型接口

int[] arr = { 0, 1, 2, 3, 4 };
List list = new List();
for (int x = 5; x < 10; x++) list.Add(x);      //形成列表5、6、7、8、9Console.WriteLine("输出数组列表ArrayList的内容:");
ProcessItems(arr); 
Console.WriteLine("输出列表List的内容:");
ProcessItems(list); 
    static void ProcessItems(IList coll){foreach (T item in coll) Console.Write(item.ToString() + " ");}   

泛型结构

在这里插入图片描述

struct Point
{public T x;  public T y;
}
Point pi = new Point();  //泛型为int的Point
pi.x = 2; pi.y = 2;
Point pd = new Point(); //泛型为double的Point
pd.x = 3.3; pd.y = 3.3;

泛型方法

使用类型参数声明的方法

在这里插入图片描述

static void Swap(ref T lhs, ref T rhs) //声明泛型方法:两者交换{T temp; temp = lhs; lhs = rhs; rhs = temp;}int a = 1; int b = 2;
Swap(ref a, ref b); //调用泛型方法:指定泛型参数的类型
double c = 1.1d; double d = 2.2d;
Swap(ref c, ref d); //调用泛型方法:省略类型参数,编译器将推断出该参数

泛型委托和泛型事件

  • 通过指定类型参数,可以引用泛型委托

在这里插入图片描述

  • 基于泛型委托,可以定义泛型事件
  • 此时发送方参数可以为强类型,不再需要强制转换成Object,或反向强制转换
    在这里插入图片描述

default关键字及协变和逆变

  • 使用default关键字,对泛型参数的变量赋初值(T t = default(T);)

  • 对于引用类型会返回null;对于数值类型会返回0;对于结构,此关键字将返回初始化为零或null的每个结构成员

协变和逆变

在这里插入图片描述
在这里插入图片描述

class Person { }
class Student : Person { }
class MyList { }
class MySortedList : MyList { }
class Flock { }MyList p1 = new MyList();
MySortedList c1 = new MySortedList();
p1 = c1;                   //OK,派生类可直接转换为基类
c1 = (MySortedList)p1;//OK,派生类可直接转换为基类MyList p2 = new MyList();
MyList c2 = new MyList();
p2 = c2;               //编译错误,不同类型参数的对象之间不能转化
c2 = (MyList)p2;//编译错误,不同类型参数的对象之间不能转化

上一篇:孝道的诗句

下一篇:文学赏析读后感

相关内容

热门资讯

小学语文汉语拼音教学思考论文 小学语文汉语拼音教学思考论文  兴趣是鼓舞和推动儿童学习的一种力量,是启动开发儿童智能的一把金钥匙,...
《新课程标准》下谈说课 《新课程标准》下谈说课“说课”是深化教育(www.xfhttp.com-雪风网络xfhttp教育网)...
多元作文评价让学生感受人文关... 多元作文评价让学生感受人文关怀论文  在日常学习、工作或生活中,大家对作文都不陌生吧,作文是人们把记...
乒乓球运动发展中存在的危机及... 乒乓球运动发展中存在的危机及改革措施论文  摘 要:伦敦奥运会上,中国乒乓球的完胜使中国乒乓球成为众...
建筑工程监理难点及应对策略的... 建筑工程监理难点及应对策略的论文(通用6篇)  在平时的学习、工作中,大家肯定对论文都不陌生吧,论文...
的企业品牌营销的论文 关于的企业品牌营销的论文  近一、二十年来,特别是进入本世纪以来,世界经济环境发生了深刻的变化。各种...
人文精神的内涵与实践方向论文 人文精神的内涵与实践方向论文  【摘要】探寻人文精神的重要性在于将人的本质交还给人和人类社会,没有人...
高中化学数字化手持技术教学研... 高中化学数字化手持技术教学研究论文  摘要:在理科的实验之中,数字化的手持技术可以被广泛的运用于其中...
防治雾霾公益主题海报设计的细... 防治雾霾公益主题海报设计的细节探寻的论文  【摘要】:近些年来,随着我国经济社会的快速发展,大气污染...
个案研究 个案研究(李妍(南开大学)于2003-3-29 14:56:27发布)案主情况案主男,十九岁,系某高...
根据年龄特点进行集体主义教育 根据年龄特点进行集体主义教育我们依据《小学德育纲要》,根据学生的年龄特点及认识水平,将各年级的集体主...
创办特色教育 创办特色教育随着中国加入WTO,社会的不断向前发展,竞争日趋激烈,作为一个企业,一个单位,一种事业,...
市政给水管道工程施工技术完善... 市政给水管道工程施工技术完善论文  摘要:随着城市化建设进程的不断加快,城市各项基础设施的建设速度也...
高等职业教育应用WebQue... 高等职业教育应用WebQuest教学模式的研究论文  论文关键词:高职教育 WebQuest 设计 ...
气体液化的历程 气体液化的历程气体液化的发展经历了一个曲折而漫长的过程,刚过去的2008年是氦气液化100周年.通过...
大学毕业论文的答辩流程 大学毕业论文的答辩流程  毕业论文答辩是一种有组织、有准备、有计划的形式,本文就来分享一篇大学毕业论...
变形金刚(Transform... 变形金刚(Transformers)高中生山姆终于拥有了自己平生第一辆汽车,这车外观虽然破旧点,但是...
那些人、那些事论文 那些人、那些事论文 那些人、那些事论文  我们走过的,我们不曾忘却;我们怀念着,渴望再次拥有。...
浅谈康德道德神学的证明及其意... 浅谈康德道德神学的证明及其意义论文  康德的批判哲学体系由《纯粹理性批判》、《实践理性批判》和《判断...
大学心理健康论文800字   导语:大学生时代是人生中一段既美好又特殊的时期。现在的社会给我们提供了充分施展自我才能的舞台和多...