关键词:
23.1 泛型的概念
(1)在普通集合中,元素均被看做是object类型,会有以下缺点
(a)赋值时候将类型转为object,使用时候又将object转为对应的类型,在装箱和拆箱时候造成一定性能损失;
(b)任何类型的数据都可以放进集合里面,不利于类型安全检查;
static void Main(string[] args) { Queue q = new Queue(); q.Enqueue(10); q.Enqueue("wo"); // q.Enqueue(1); foreach (int item in q) //字符串无法转为int 类型输出 { Console.WriteLine(item); Console.Read(); }
(2)泛型集合:泛型集合和普通集合功能是一样的,唯一的区别是泛型集合元素的类型不是object类型,而是我们制定的类型
定义:Queue<T> myque =new Queue<T>();(T为我们可以指定的类型)
//(2)泛型集合:泛型集合和普通集合功能是一样的,唯一的区别是泛型集合元素的类型不是object类型,而是我们制定的类型 //定义:Queue<T> myque =new Queue<T>();(T为我们可以指定的类型) Queue<int> my = new Queue<int>(); my.Enqueue(10); //my.Enqueue("wo"); //error类型错误不符,无法赋值 my.Enqueue(1);
(3)除了可有有泛型集合,还可以定义泛型函数,结构体,委托等,只需在函数名或者集合名后加<T>
class Program { static void Main(string[] args) { } //(3)除了可有有泛型集合,还可以定义泛型函数,结构体,委托等,只需在函数名或者集合名后加<T> public static void swap<T>(ref T a,ref T b) { T c; c = a; a = b; b = a; } } //(4)泛型的定义中还可以含有多个类型参数 public struct mystruce<V,K> { }
23.2 泛型集合类
C#定义和许多常见泛型集合类,在system.collections.generic 空间下
(1)List<T>类 对应非泛型集合ArrayList
//(1)List<T>类 对应非泛型集合ArrayList List<string> basketballplayer = new List<string>(5); basketballplayer.Add("yaoming"); basketballplayer.Add("kobi"); basketballplayer.Add("maidi"); foreach (string item in basketballplayer) { Console.WriteLine(item); } Console.Read();
(2)Stack<T>类 对应非泛型集合 Stack
//(2)Stack<T>类 对应非泛型集合 Stack Stack<int> s=new Stack<int>(); s.Push(1); s.Push(2); s.Push(3); s.Push(4); foreach (var item in s) { Console.WriteLine(item); } Console.Read(); Console.WriteLine("************");
(3)Queue<T>类 对应非泛型集合 Queue
//(3)Queue<T>类 对应非泛型集合 Queue Queue<int> q = new Queue<int>(); q.Enqueue(1); q.Enqueue(2); q.Enqueue(3); foreach (var item in q) { Console.WriteLine(item); } Console.Read();
23.3 泛型的类型约束
(1)在泛型中由于泛型类型T可以是任何类型,在某些情况下(由于无法确定T的类型时候)会有问题,如下:
(2)此处,由于item为T类型,系统无法确定其类型,因此无法确定这个类型是否包含name成员,因此出错
这时候,使用类型约束(关键字 where T :+限制的范围)where T: Aniamal即可将T限制在Aniamal及其子类中,就可以知道T类型,因此就不会出错了
class Program { static void Main(string[] args) { } } //23.3 泛型的类型约束 //(1)在泛型中由于泛型类型T可以是任何类型,在某些情况下(由于无法确定T的类型时候)会有问题,如下: class AnimalFamily<T> //class AnimalFamily<T> where T: Aniamal { public List<T> t=new List<T>(); public void AddList( T item) { t.Add(item); } public void Display() { foreach (var item in t) { Console.WriteLine(item.name); //错误 1 “T”不包含“name”的定义,并且找不到可接受类型为“T”的第一个参数的扩展方法“name”(是否缺少 using 指令或程序集引用?) E:张开能C#code第二十三章Test04Program.cs 27 40 Test04 //(2)此处,由于item为T类型,系统无法确定其类型,因此无法确定这个类型是否包含name成员,因此出错 //这时候,使用类型约束(关键字 where T :+限制的范围)where T: Aniamal即可将T限制在Aniamal及其子类中,就可以知道T类型,因此就不会出错了 } } } class Aniamal { public string name; }
第二十三章-命令模式(代码片段)
命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。烧烤程序#define_CRT_SECURE_NO_WARNINGS#include<iostream>#include<vector>#include<string&... 查看详情
第二十三章程序集加载和反射
目录:23.1 程序集加载23.2 使用反射构建动态可扩展应用程序23.3 反射的性能23.4 设计支持加载项的应用程序23.5 使用反射发现类型的成员23.1 程序集加载JIT编译器将方法的IL代码编译成本机代码时,会查看IL... 查看详情
实战:第二十三章:接入第三方api访问连接超时,httpclient请求超时问题
在代码中使用HttpClient调用国外facebook或者google连接,报连接超时问题,使用postman调用有时也会出现,连接没响应的情况,使用浏览器访问有响应。使用公司提供的vpn,可以实现国外url访问。解决方案:vpn... 查看详情
学习笔记第二十三节课
管道符和作业控制管道符表示把一个文件的输出的内容,传递给后面的命令。比如wc-l的用法可以统计ls下有多少个目录文件。还有之前用的find命令。可以列出当前目录下所有文件,也可以用管道符。以后会经常用管道符。ctrl+z... 查看详情
第二十三章expect-正则表达式-sed-cut的使用
参考技术A本节所讲内容23.1 expect 实现无交互登录23.2 正则表达式23.3 sed流编译器23.4 cut命令23.5 实战-bash 脚本语法检查和查看详细的执行过程23.1 expect 实现无交互登录expect 是它发展出... 查看详情
openssl详解
...et/liguangxianbin/article/details/79665100目录目录第一章 前言第二章 证书第三章 加密算法第四章 协议第五章 入门第六章 指令 verify第七章 指令asn1parse第八章 指令CA(一)第九章 指令CA(二)第十... 查看详情
二十三章——相应路径下的代码统计
这里运用了流等知识写了一个小工具,可以统计某个路径下的代码的行数:packagecom.maya.hanqi.coder;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.IOException;publ 查看详情
批处理学习笔记第二十三课:用户变量和变量引用
用户变量 编写批处理程序时,用户根据需要自己定义的变量称之为用户变量。用户变量类似于C语言里面的变量,仅仅在定义该变量的程序中有效。 用户变量由set命令定义,这是批处理中非常非常重要... 查看详情
华为实习日记——第二十三天
...任务,就把cinder-volume的创建卷的过程过了一遍,记了下笔记。 下午的时候很无聊,师父要开一天会,没人给我任务。就一边刷刷知乎,一边尝试着重构objgraph的代码,使其能够打印出具体对象的数量。 3点钟的时候同事... 查看详情
全国计算机等级考试二级python(2021年9月)备考笔记第十四天(代码片段)
文章目录Python二级等考(第三季)精品题5单项选择题第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题第十一题第十二题第十三题第十四题第十五题第十六题第十七题第十八题第十九题第二十题第二十一题第二十... 查看详情
全国计算机等级考试二级python(2021年9月)备考笔记第十二天(代码片段)
文章目录Python二级等考(第三季)精品题3单项选择题第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题第十一题第十二题第十三题第十四题第十五题第十六题第十七题第十八题第十九题第二十题第二十一题第二十... 查看详情
第二十三课
第二十三课第一单元语法部分Vておく<提前>:预先…… 口语形式:~とく 说明: A、表示为后面要做的事情事先做好某种准备。 B、表示采取某种行为,并使其结果的状态持续下去。&nb... 查看详情
实战:第二十三章:接入第三方api访问连接超时,httpclient请求超时问题
在代码中使用HttpClient调用国外facebook或者google连接,报连接超时问题,使用postman调用有时也会出现,连接没响应的情况,使用浏览器访问有响应。使用公司提供的vpn,可以实现国外url访问。解决方案:vpn... 查看详情
c#编程(二十三)----------实现继承
原文链接:http://blog.csdn.net/shanyongxu/article/details/46593809 如果要声明派生自另一个类的一个类,可以使用下面的语法:class DerivedClass: BaseClass{//function and data members here}这个语法类似于C++和Ja 查看详情
重学java基础第二十三课:java基础注释
第二十三天
迭代器模式和观察值模式"""行为模式:是对不同的对象之间划分责任和算法的抽象方式。重点在于类和类之间相互作用。#迭代器模式#观察者模式"""1.迭代器模式#Iterable:iter方法:returnIterator#Iterator:nextiter方法#用于访问集合对象的... 查看详情
第二十三篇densenet——论文翻译
文章目录摘要1引言2相关工作3DenseNets4实验4.1数据集4.2训练4.3CIFAR和SVHN的分类结果4.4.ImageNet上的分类结果5讨论 查看详情
java学习笔记第十三章css
JAVA学习笔记第十三章13.CSS13.1CSS书写方式【1】内联样式【2】内部样式【3】外部样式有多个html页面需要用到该样式,可以在css文件夹下新建css文件mystyle.css在html文件中通过link导入css【4】实际开发中常用第三种方式,这种方式真... 查看详情