第十七章 泛型

  1. 什么是泛型

    泛型是为了适应多种不同种类的数据类型而存在的。有了它之后,我们可以不用为不同的数据类型而单独写一个适配。这样很麻烦。

    类型不是对象,而是对象的模板。泛型类型也不是类型,而是类型的模板。

  2. 写法

    C++中,写法比c#中多了一点东西。

    Template <typename T>

    申明完之后,然后才用T。

    C#中,直接用

    Class MyStack<T>

     

    步骤: 声明泛型类型、通过提供真实类型构建构造类型、从构造类型创建实例。

    <>类型参数。 也叫占位符。 和值参数、引用参数、输出参数等类似。

     

    C++中,有模板类,类模板,模板函数,函数模板。其中,模板函数就是函数模板的实例化。

    C#中,有泛型类、构造类。其实后者是前者的实例化。

     

    非泛型栈与泛型栈之间的比较:

  3. 类型参数的约束

    为了让编译器知道参数可以接受哪些类型,需要增加额外的信息。

    需要用where字句。

     

    Class myclass <T1,T2,T3>

    Where T2: Customer

    Where T3: IComparable

    {

    }

     

    约束类型和次序。

    Class struct interface new();

     

  4. 泛型方法

    Public void myfun<T,S> (T p, S t) where S:person

    {

    //内容

    }

     

    调用:myfun<short,int>();

    推断类型,如果编译器已经知道方法调用中具体的参数类型。我们可以省略<> 不写。

     

  5. 扩展方法和泛型类

  6. 泛型结构

struct
Piece<T>

{

public Piece(T data) { _data = data; }

public T _data;

}

  1. 泛型委托

delegate R mydelegate<T,R>(T value);

这里面包含两个参数列表。委托形参列表T value;
类型参数列表 R <T,R>。
返回值、形参列表、约束字句。

  1. 泛型接口

    Interface Imyifc<T> { T ReturnIt(T invalue); }

    注:泛型接口的实现必须唯一。保证类型实参组合不会在类型中产生两个重复的接口。也就是说,不能有同样的接口声明。

  2. 斜变与逆变

    略。

     

第十八章 枚举器和迭代器

1、枚举器

枚举器可以依次返回请求的数组中的元素。枚举器知道项的次序并且跟踪它在序列中的位置,然后返回请求的当前项。实现了getenumerator方法的类型称为可枚举类型。数组就是其一。可以用 foreach 语句。

Foreach (int item in array)

Xxxx;

数组 是 可枚举类型,它是一个枚举器的对象,是实现了Ienumerable接口的类型。数组实现了getenumerator方法。在枚举器里面还有很多函数成员。Current、movenext、reset。

  1. using System;
  2. using System.Collections;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace CsharpStart
  7. {
  8.     class ColorEnumerator : IEnumerator
  9.     {
  10.         string[] _colors;
  11.         int _posion = -1;
  12.         public ColorEnumerator(string[] theColors)
  13.         {
  14.             _colors = new
    string[theColors.Length];
  15.             for (int i = 0; i < theColors.Length; ++i )
  16.             {
  17.                 _colors[i] = theColors[i];
  18.             }
  19.         }
  20.         public
    object Current
  21.         {
  22.             get
  23.             {
  24.                 if (_posion == -1)
  25.                 {
  26.                     throw
    new InvalidOperationException();
  27.                 }
  28.                 if (_posion >= _colors.Length)
  29.                 {
  30.                     throw
    new InvalidOperationException();
  31.                 }
  32.                 return _colors[_posion];
  33.             }
  34.         }
  35.         public
    bool MoveNext()
  36.         {
  37.             if (_posion < _colors.Length -1)
  38.             {
  39.                 _posion++;
  40.                 return
    true;
  41.             }
  42.             else
  43.             {
  44.                 return
    false;
  45.             }
  46.         }
  47.         public
    void Reset()
  48.         {
  49.             _posion = -1;
  50.         }
  51.  
  52.     }
  53.     class Spectrum : IEnumerator
  54.     {
  55.         string[] Colors = { "volilet", "blue", "cyan", "yellow" };
  56.         public IEnumerator GetEnumerator()
  57.         {
  58.             return
    new ColorEnumerator(Colors);
  59.         }
  60.     }
  61.  
  62. }

    当然,也支持泛型枚举接口。

2、迭代器

迭代器是由多个yield语句的代码块。迭代器可以用来创建可枚举类。

C#复习总结6 (需要进一步复习)的更多相关文章

  1. C#总结复习5(需要进一步复习)

    第十五章 接口 1.接口: C++中允许多继承没有接口的概念.而java与C#中有,因为C#中 是单继承多接口. 所谓的接口,其实和抽象类.方法相似.都只有一个空方法.其本身不可以为基类,但是允许被其 ...

  2. Java复习——反射和泛型的复习

    反射 Class类 一个类被类加载器加载到内存之中,占有一片区域,这个空间里的内容就是类的字节码,不同的类的字节码是不一样的,这一个个空间页可以使用类来表示,这就是Class类. 根据这个概念可知:不 ...

  3. CSP-S考前救急(考试前还是别复习了,事实证明复习了也没考到...

    “不要为明天而忧虑,因为明天自有明天的忧虑:一天的难处一天当就够了.” 念念不忘,必有回响. 考试结束前15分钟停止写代码.然后按照以下顺序进行检查: -检查文件名是否写错-检查是否打开文件输入输出 ...

  4. 前端复习笔记--1.html标签复习速查

    概览 文档章节 <body> <header> <nav> 导航 <aside> 表示和主要内容不相关的区域 <article> 表示一个独 ...

  5. PJ初赛复习日记

    PA姑娘的PJ初赛复习日记 by Pleiades_Antares PJ初赛考试马上就要开始了(今年应该是10.13吧?),作为蒟蒻的我们怎么能不复习呢? 众所周知,复习方法有很多很多种-- 比如 ( ...

  6. now code——处女座的期末复习

    题目描述 快要期末考试了,处女座现在有n门课程需要考试,每一门课程需要花ai小时进行复习,考试的起始时间为bi,处女座为了考试可以不吃饭不睡觉,处女座想知道他能否复习完所有的科目(即在每一门考试之前复 ...

  7. php面试题10(复习)

    php面试题10(复习) 一.总结 复习 二.php面试题10 21.谈谈 asp,php,jsp 的优缺点(1 分)(asp要钱,jsp学习成本大)答:ASP 全名 Active Server Pa ...

  8. Span复习

    Span复习 using System; namespace Span复习 { class Program { static void Main(string[] args) { //Console. ...

  9. java面向对象复习之一

    目的: 复习如何实现代码的逻辑思路: 复习类的封装: 复习类和对象的创建使用和封装: 练习: 实现功能:人到超市买东西 抽出三个类: 人 超市 东西: 功能点: 买: 它们之间的联系:东西包含于超市 ...

随机推荐

  1. [git 学习篇] git文件版本回退再学习

    需求;  准备把readme.txt回退到上一个版本,也就是“add distributed”的那个版本 首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3 ...

  2. 九度oj 题目1372:最大子向量和(连续子数组的最大和)

    题目描述: HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天JOBDU测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但 ...

  3. 刷题总结——解方程(NOIP2014)

    题目: 题目描述 已知多项式方程: a0+a1x+a2x2+…+anxn=0 求这个方程在[1,m]内的整数解(n 和 m 均为正整数). 输入格式 输入共 n+2 行. 第一行包含 2 个整数 n. ...

  4. python -- DNS处理模块dnspython

    简介 dnspython – 是python实现的一个DNS工具包,利用其查询功能来实现dns的服务监控及解析结果的校验 安装dnspython pip install dnspython 使用 常见 ...

  5. d3 添加元素相关api

    选择元素 d3.select([dom]) d3.selectAll([dom]) 添加元素 d3.select("body").append("p") 插入内 ...

  6. Git基础篇【转】

    转自:https://i.cnblogs.com/EditPosts.aspx?opt=1 1.设置名字与邮箱 $ Git config –global user.name “YourName” $ ...

  7. 标准C程序设计七---101

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  8. Yii命令行模式

    (具体参数描述请使用命令看描述,不过全是英文) 1.Yii提供命令行指令不多,常用的有webapp 和 shell. 1.  message 搜索指定文件信息 yicc message webroot ...

  9. Toast问题记录:This Toast was not created with Toast.makeText()

    最近使用自己封装的Toast时,遇到一个问题 java.lang.RuntimeException: This Toast was not created with Toast.makeText() ...

  10. est6 -- Object.is()、Object.assign()、Object.defineProperty()、Symbol、Proxy

    Object.is()用来比较两个值是否严格相等.它与严格比较运算符(===)的行为基本一致,不同之处只有两个:一是+0不等于-0,二是NaN等于自身. + === - //true NaN === ...