ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Generics(泛型)
1.A,示例(Sample) 返回顶部

“泛型”示例 (C#)

本示例演示如何创建具有单个类型参数的自定义泛型列表类,以及如何实现 IEnumerable 以便对列表的内容启用 foreach 迭代。此示例还演示客户端代码如何通过指定类型参数来创建该类的实例,以及该类型参数的约束如何实现对类型参数执行其他操作。

安全说明

提供此代码示例是为了阐释一个概念,它并不代表最安全的编码实践,因此不应在应用程序或网站中使用此代码示例。对于因将此代码示例用于其他用途而出现的偶然或必然的损害,Microsoft 不承担任何责任。

在 Visual Studio 中生成并运行“泛型”示例

  • 在“调试”菜单上,单击“开始执行(不调试)”。

从命令行生成并运行“泛型”示例

  • 在命令提示符处,键入以下命令:

    csc generics.cs
    generics

注释

提供此示例是出于演示目的,必须经过修改后才能在成品代码中使用。为获得成品质量的代码,强烈建议您尽可能使用System.Collections.Generic 命名空间中的集合类。

1.B,示例代码(Sample Code)返回顶部

1.B.1, Generic.cs

// 版权所有(C) Microsoft Corporation。保留所有权利。
// 此代码的发布遵从
// Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。
//
// 版权所有(C) Microsoft Corporation。保留所有权利。using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;namespace Generics_CSharp
{// 尖括号中的类型参数 T。public class MyList<T> : IEnumerable<T>{protected Node head;protected Node current = null;// 嵌套类型也是 T 上的泛型protected class Node{public Node next;// T 作为私有成员数据类型。private T data;// 在非泛型构造函数中使用的 T。public Node(T t){next = null;data = t;}public Node Next{get { return next; }set { next = value; }}// T 作为属性的返回类型。public T Data{get { return data; }set { data = value; }}}public MyList(){head = null;}// T 作为方法参数类型。public void AddHead(T t){Node n = new Node(t);n.Next = head;head = n;}// 实现 GetEnumerator 以返回 IEnumerator<T>,从而启用列表的// foreach 迭代。请注意,在 C# 2.0 中, // 不需要实现 Current 和 MoveNext。// 编译器将创建实现 IEnumerator<T> 的类。public IEnumerator<T> GetEnumerator(){Node current = head;while (current != null){yield return current.Data;current = current.Next;}}// 必须实现此方法,因为// IEnumerable<T> 继承 IEnumerable
        IEnumerator IEnumerable.GetEnumerator(){return GetEnumerator();}}public class SortedList<T> : MyList<T> where T : IComparable<T>{// 一个未优化的简单排序算法,// 该算法从低到高对列表元素排序:public void BubbleSort(){if (null == head || null == head.Next)return;bool swapped;do{Node previous = null;Node current = head;swapped = false;while (current.next != null){// 由于需要调用此方法,因此,SortedList// 类在 IEnumerable<T> 上是受约束的if (current.Data.CompareTo(current.next.Data) > 0){Node tmp = current.next;current.next = current.next.next;tmp.next = current;if (previous == null){head = tmp;}else{previous.next = tmp;}previous = tmp;swapped = true;}else{previous = current;current = current.next;}}// end while} while (swapped);}}// 一个将自身作为类型参数来实现 IComparable<T> 的简单类,// 是对象中的// 常用设计模式,这些对象// 存储在泛型列表中。public class Person : IComparable<Person>{string name;int age;public Person(string s, int i){name = s;age = i;}// 这会使列表元素// 按 age 值排序。public int CompareTo(Person p){return age - p.age;}public override string ToString(){return name + ":" + age;}// 必须实现 Equals。public bool Equals(Person p){return (this.age == p.age);}}class Generics{static void Main(string[] args){// 声明并实例化一个新的范型 SortedList 类。// Person 是类型参数。SortedList<Person> list = new SortedList<Person>();// 创建 name 和 age 值以初始化 Person 对象。string[] names = new string[] { "Franscoise", "Bill", "Li", "Sandra", "Gunnar", "Alok", "Hiroyuki", "Maria", "Alessandro", "Raul" };int[] ages = new int[] { 45, 19, 28, 23, 18, 9, 108, 72, 30, 35 };// 填充列表。for (int x = 0; x < names.Length; x++){list.AddHead(new Person(names[x], ages[x]));}Console.WriteLine("Unsorted List:");// 打印出未排序的列表。foreach (Person p in list){Console.WriteLine(p.ToString());}// 对列表进行排序。
            list.BubbleSort();Console.WriteLine(String.Format("{0}Sorted List:", Environment.NewLine));// 打印出排序的列表。foreach (Person p in list){Console.WriteLine(p.ToString());}Console.WriteLine("Done");}}}

View Code

1.B.2,

1.C,下载地址(Free Download)返回顶部
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

ylbtech-LanguageSamples-Generics(泛型)相关推荐

  1. Dart基础之Generics 泛型 <T>

    Java开发过程中,会通过重载实现根据不同的参数类型生成类似方法(多态),进一步可以通过 泛型 进一步提取基类方法:而对于 Dart 而言,为了解决多种方式构造对象的场景,也可以通过 Dart 中的 ...

  2. C# Generics 泛型

    C# Generics 泛型 泛型优点 性能 为了让方法传递任何类型的参数,可以用object类来传递参数.值类型转换为引用类型称为装箱,引用类型转换为值类型称为拆箱,需要强制转换.如下代码所示: 数 ...

  3. JavaSE-Adventure(III): Generics 泛型程序设计

    JavaSE-Adventure (III): 泛型程序设计 CONTENTS JavaSE-Adventure (III): 泛型程序设计 概述 泛型概念 泛型的提出背景 泛型的作用 使用泛型 泛型 ...

  4. typescript学习:Generics泛型

    本文内容如下 泛型Generics的了解与使用 如果你都有了答案,可以忽略本文章,或去TS学习地图寻找更多答案 泛型 定义:占位符,定义时不知道未来需要什么值,等调用的时候再传 作用:提升类,接口,方 ...

  5. 第四章 Generics - 泛型

    现在,你已经知道了Swift中如何实现基本的类和结构,但Swift的强大远不止如此.本章要讲的是Swift的另一个非常强大的语法:泛型. 对于类型安全的语言来说,都有一个常见的问题.想写一个作用于一种 ...

  6. Generics (泛型)

    Generics 是 JDK 5.0 新增加的功能,在使用集合时,提供了一种编译时类型安全检查功能,并能减少类型强制转化的麻烦. 当从一个集合中取出一个元素时,例如使用 Iterator 接口中的 n ...

  7. TypeScript Generics(泛型)

    软件工程的一个主要部分就是构建组件,构建的组件不仅需要具有明确的定义和统一的接口,同时也需要组件可复用.支持现有的数据类型和将来添加的数据类型的组件为大型软件系统的开发过程提供很好的灵活性. 在C#和 ...

  8. Java基础学习——泛型(generics)学习一

    概述 在JDK 5.0,Java语言引入了好几个新的功能,其中很重要的一个就是泛型(generics). 本文就是对泛型的一个概述.你可以很熟悉其他语言中的类似结构,比如C++里的模板(templat ...

  9. 9.1-全栈Java笔记: 容器泛型—认识Collection接口

    开发和学习中需要时刻和数据打交道,如果组织这些数据是我们编程中重要的内容. 我们一般通过"容器"来容纳和管理数据.   事实上,数组就是一种容器,可以在其中放置对象或基本类型数据. ...

  10. java 泛型嵌套泛型_Java泛型嵌套

    package com.study.generics; //泛型的嵌套使用 public class GenericsDemo06 { public static void main(String [ ...

最新文章

  1. python常用库 自动化办公类 —— PyPDF2(处理pdf文件)
  2. 深度学习笔记 第四门课 卷积神经网络 第二周 深度卷积网络:实例探究
  3. Lisp尺寸标注增加前后缀_汽车雨刷器也是有尺寸的,那具体的尺寸该如何分辨呢?...
  4. Cortex-M3基础
  5. 老男孩爬虫实战密训课第一季,2018.6,初识爬虫训练-实战1-爬取汽车之家新闻数据...
  6. 使用轻量级Spring @Scheduled注解执行定时任务
  7. 移植性问题のLPTSTR、LPCSTR、LPCTSTR、LPSTR之间的转换 转
  8. java循环打印三角形_Java for循环打印三角形(基础)
  9. Bailian3175 验证极限【数学】
  10. delphi用IdTCPServer和IdTCPClient传输文件
  11. html5 audio 资源,HTML5 Audio(音频)
  12. php调用笛风接口,优雅的用PHP来实现解析抖音无水印视频!
  13. 服务器后台运行程序(nohup/screen/tmux)
  14. linux 约等于符号,在Mac中的特殊符号如何打
  15. 输入框字数统计--过滤拼音
  16. 【错误记录】安卓项目编译报错 ( offline mode 错误 )
  17. Minor GC、Young GC、Old GC、Major GC、Mixed GC、Full GC都是什么?
  18. 怎么配置android远程服务器地址,在 Android studio 中 配置Gradle 进行 “动态编译期间,指定 远程服务器地址 ,生成多个安装包”...
  19. 按键精灵脚本-windows桌面自动化操作
  20. 项目一_GoldenEye

热门文章

  1. XPath实例教程十四、following-sibling轴
  2. Java开发必须掌握的线上问题排查命令
  3. 开源Pravega架构解析:如何通过分层解决流存储的三大挑战?
  4. transfer 全平台Windows linux mac配置文件转换工具
  5. B-tree结构菜单的递归查询
  6. chcapter 2 量子力学介绍
  7. 在NAS设备上用NFS服务为RAC数据库和集群件存储oracle文件时的mount选项
  8. SoftReference
  9. Effective Java实作toString() - 就是爱Java
  10. System.Diagnostics.Process.Start()