C#复习总结6 (需要进一步复习)
第十七章 泛型
- 什么是泛型
泛型是为了适应多种不同种类的数据类型而存在的。有了它之后,我们可以不用为不同的数据类型而单独写一个适配。这样很麻烦。
类型不是对象,而是对象的模板。泛型类型也不是类型,而是类型的模板。

- 写法
C++中,写法比c#中多了一点东西。
Template <typename T>
申明完之后,然后才用T。
C#中,直接用
Class MyStack<T>
步骤: 声明泛型类型、通过提供真实类型构建构造类型、从构造类型创建实例。
<>类型参数。 也叫占位符。 和值参数、引用参数、输出参数等类似。

C++中,有模板类,类模板,模板函数,函数模板。其中,模板函数就是函数模板的实例化。
C#中,有泛型类、构造类。其实后者是前者的实例化。
非泛型栈与泛型栈之间的比较:

- 类型参数的约束
为了让编译器知道参数可以接受哪些类型,需要增加额外的信息。
需要用where字句。
Class myclass <T1,T2,T3>
Where T2: Customer
Where T3: IComparable
{
}
约束类型和次序。
Class struct interface new();
- 泛型方法

Public void myfun<T,S> (T p, S t) where S:person
{
//内容
}
调用:myfun<short,int>();
推断类型,如果编译器已经知道方法调用中具体的参数类型。我们可以省略<> 不写。
- 扩展方法和泛型类

- 泛型结构
struct
Piece<T>
{
public Piece(T data) { _data = data; }
public T _data;
}
- 泛型委托
delegate R mydelegate<T,R>(T value);
这里面包含两个参数列表。委托形参列表T value;
类型参数列表 R <T,R>。
返回值、形参列表、约束字句。
- 泛型接口
Interface Imyifc<T> { T ReturnIt(T invalue); }
注:泛型接口的实现必须唯一。保证类型实参组合不会在类型中产生两个重复的接口。也就是说,不能有同样的接口声明。
- 斜变与逆变
略。
第十八章 枚举器和迭代器
1、枚举器
枚举器可以依次返回请求的数组中的元素。枚举器知道项的次序并且跟踪它在序列中的位置,然后返回请求的当前项。实现了getenumerator方法的类型称为可枚举类型。数组就是其一。可以用 foreach 语句。
Foreach (int item in array)
Xxxx;
数组 是 可枚举类型,它是一个枚举器的对象,是实现了Ienumerable接口的类型。数组实现了getenumerator方法。在枚举器里面还有很多函数成员。Current、movenext、reset。
- using System;
- using System.Collections;
- using System.Linq;
- using System.Text;
- namespace CsharpStart
- {
- class ColorEnumerator : IEnumerator
- {
- string[] _colors;
- int _posion = -1;
- public ColorEnumerator(string[] theColors)
- {
- _colors = new
string[theColors.Length]; - for (int i = 0; i < theColors.Length; ++i )
- {
- _colors[i] = theColors[i];
- }
- }
- public
object Current - {
- get
- {
- if (_posion == -1)
- {
- throw
new InvalidOperationException(); - }
- if (_posion >= _colors.Length)
- {
- throw
new InvalidOperationException(); - }
- return _colors[_posion];
- }
- }
- public
bool MoveNext() - {
- if (_posion < _colors.Length -1)
- {
- _posion++;
- return
true; - }
- else
- {
- return
false; - }
- }
- public
void Reset() - {
- _posion = -1;
- }
- }
- class Spectrum : IEnumerator
- {
- string[] Colors = { "volilet", "blue", "cyan", "yellow" };
- public IEnumerator GetEnumerator()
- {
- return
new ColorEnumerator(Colors); - }
- }
- }
当然,也支持泛型枚举接口。
2、迭代器
迭代器是由多个yield语句的代码块。迭代器可以用来创建可枚举类。
C#复习总结6 (需要进一步复习)的更多相关文章
- C#总结复习5(需要进一步复习)
第十五章 接口 1.接口: C++中允许多继承没有接口的概念.而java与C#中有,因为C#中 是单继承多接口. 所谓的接口,其实和抽象类.方法相似.都只有一个空方法.其本身不可以为基类,但是允许被其 ...
- Java复习——反射和泛型的复习
反射 Class类 一个类被类加载器加载到内存之中,占有一片区域,这个空间里的内容就是类的字节码,不同的类的字节码是不一样的,这一个个空间页可以使用类来表示,这就是Class类. 根据这个概念可知:不 ...
- CSP-S考前救急(考试前还是别复习了,事实证明复习了也没考到...
“不要为明天而忧虑,因为明天自有明天的忧虑:一天的难处一天当就够了.” 念念不忘,必有回响. 考试结束前15分钟停止写代码.然后按照以下顺序进行检查: -检查文件名是否写错-检查是否打开文件输入输出 ...
- 前端复习笔记--1.html标签复习速查
概览 文档章节 <body> <header> <nav> 导航 <aside> 表示和主要内容不相关的区域 <article> 表示一个独 ...
- PJ初赛复习日记
PA姑娘的PJ初赛复习日记 by Pleiades_Antares PJ初赛考试马上就要开始了(今年应该是10.13吧?),作为蒟蒻的我们怎么能不复习呢? 众所周知,复习方法有很多很多种-- 比如 ( ...
- now code——处女座的期末复习
题目描述 快要期末考试了,处女座现在有n门课程需要考试,每一门课程需要花ai小时进行复习,考试的起始时间为bi,处女座为了考试可以不吃饭不睡觉,处女座想知道他能否复习完所有的科目(即在每一门考试之前复 ...
- php面试题10(复习)
php面试题10(复习) 一.总结 复习 二.php面试题10 21.谈谈 asp,php,jsp 的优缺点(1 分)(asp要钱,jsp学习成本大)答:ASP 全名 Active Server Pa ...
- Span复习
Span复习 using System; namespace Span复习 { class Program { static void Main(string[] args) { //Console. ...
- java面向对象复习之一
目的: 复习如何实现代码的逻辑思路: 复习类的封装: 复习类和对象的创建使用和封装: 练习: 实现功能:人到超市买东西 抽出三个类: 人 超市 东西: 功能点: 买: 它们之间的联系:东西包含于超市 ...
随机推荐
- gdb调试手册 一 gdb概述
一 gdb概述 gdb调试器的目的是让你了解其他的程序在执行的时候发生了什么或者其他程序崩溃时正在做什么 gdb主要能够在运行中做四类事情(包括这些事情中的一些附加的事情)来帮助你获取bugs a 运 ...
- 第四部分 linux使用者管理
第一章 linux帐号管理与acl权限控制 不同的用户拥有不同的权限 可以通过user/group的特殊权限设定,来规范不同的群组开发 一 linux帐号与群组 A 使用者的识别码: UI ...
- String、StringBuffer和StringBuilder,定义一个自己的StringBuilder的类
String Java中的字符串值属于String类,虽然有其它方法表示字符串(如字符数组),但Java一般使用String类作为字符串的标准格式,Java编译器把字符串值作为String对象; St ...
- springmvc始终跳转至首页,不报404错误
本篇博客特别补充:2017-3-4 9:42,经过分析和测试,本篇博客的解决方案只是碰巧,暂时的解决了问题.在后续的运行中,又出现了同样的毛病.经过日志跟踪,发现了端倪,下篇博客深入的剖析!本篇博客, ...
- 【bzoj1733】[Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 二分+网络流最大流
题目描述 Farmer John is constructing a new milking machine and wishes to keep it secret as long as possi ...
- HttpRunner自动化框架学习笔记
一.简单介绍 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求. 支持p ...
- JStorm源代码阅读——消息的确认机制
Acker //Acker相当于一个bolt,用于处理事件 public class Acker implements IBolt { private RotatingMap<Object, A ...
- BZOJ3196 二逼平衡树 【线段树套平衡树】
题目 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查询k在区间内的前驱(前驱 ...
- 给长标题加...css
.wrap{ white-space:nowrap;overflow:hidden;text-overflow: ellipsis; } <th class="wrap"&g ...
- P1875 佳佳的魔法药水 (最短路,DP)
题目链接 Solution 好题. 一开始一直在想怎么蛇皮建图,但是发现一直蛇不出来... 正解是用类似于 dijkstra 的算法对所有点进行松弛. 对于每个元素记录两个值: \(cost\) 代表 ...