using System.Collections;

class Program
{
//做个比较
static void Main(string[] args)
{
//new对象
Cls a1 = new Cls();
Cls a2 = new Cls(); //存放对象
List<Cls> testfanxing = new List<Cls>();
testfanxing.Add(a1); ArrayList testarray = new ArrayList();
testarray.Add(a2); //取对象
Cls b1 = testfanxing[];
Cls b2 = testarray[];//这句报错! 改为:Cls b2 = (Cls)testarray[0];就可正常通过,但是用了类型强制转换 //泛型啥好处?
//1、避免了强制类型转换而造成代码可读性差。
//2、既然有了类型强制转换,问题来了:类型强制转换可能会用到装箱和拆箱过程,耗时。
//3、再由于有强制类型转换,在编译的时候可能不会包错,但是运行代码的时候有可能会因为转换失败而出现错误。这就是我们说的非安全代码。搜索
}
}
一般的如果要返回一个集合数组会用到他。他增加了代码的可读性,通过他,前台编码的人就可以不费很大力气了解到这个字段什么意思。比如声明了一个Users实体类
public Calss Users
{
public string Name;
public int Age;
}
这个只是代表一个用户的对象信息,如果你获取的是个用户列表的化,就可以用List<Users> usersList = new List<Users>;然后向列表里添加每个用户信息
Users users = new Users();
users.Name = "ssss";users.Age = "";
users.add(users);
这样循环的向列表里添加信息,然后返回这个列表,在前台页面就可以用循环读出这些信息。

  泛型概述 
  使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。
  泛型最常见的用途是创建集合类。
  .NET Framework 类库在 System.Collections.Generic命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如 System.Collections 命名空间中的 ArrayList。
  您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
  可以对泛型类进行约束以访问特定数据类型的方法。
  关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取。
  优点
  泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用与集合以及作用于集合的方法一起使用。.NET Framework 2.0 版类库提供一个新的命名空间 System.Collections.Generic,其中包含几个新的基于泛型的集合类。建议面向.NET Framework 2.0 及更高版本的所有应用程序都使用新的泛型集合类,而不要使用旧的非泛型集合类如 ArrayList。
  何时使用泛型集合
  通常情况下,建议您使用泛型集合,因为这样可以获得类型安全的直接优点而不需要从基集合类型派生并实现类型特定的成员。此外,如果集合元素为值类型,泛型集合类型的性能通常优于对应的非泛型集合类型(并优于从非泛型基集合类型派生的类型),因为使用泛型时不必对元素进行装箱。
  下面的泛型类型对应于现有的集合类型:
  List<(Of <(T>)>) 是对应于 ArrayList 的泛型类。
  Dictionary<(Of <(TKey, TValue>)>) 是对应于 Hashtable 的泛型类。
  Collection<(Of <(T>)>) 是对应于 CollectionBase的泛型类。Collection<(Of <(T>)>) 可以用作基类,但与 CollectionBase不同的是它不是抽象的。这样使用起来要方便得多。
  ReadOnlyCollection<(Of <(T>)>) 是对应于ReadOnlyCollectionBase 的泛型类。ReadOnlyCollection<(Of <(T>)>) 不是抽象的,它具有一个构造函数,该构造函数使其易于将现有的List<(Of <(T>)>) 公开为只读集合。
  Queue<(Of <(T>)>)、Stack<(Of <(T>)>) 和SortedList<(Of <(TKey, TValue>)>) 泛型类分别对应于与其同名的非泛型类。
   其他类型 
  有几种泛型集合类型没有对应的非泛型类型:
  LinkedList<(Of <(T>)>) 是一个通用链接列表,它提供运算复杂度为 O(1) 的插入和移除操作。
  SortedDictionary<(Of <(TKey, TValue>)>) 是一个排序的字典,其插入和检索操作的运算复杂度为 O(log n),这使得它成为 SortedList<(Of <(TKey,
TValue>)>) 的十分有用的替代类型。
  KeyedCollection<(Of <(TKey, TItem>)>) 是介于列表和字典之间的混合类型,它提供了一种存储包含自己键的对象的方法。
  LINQ to Objects 
  LINQ to Objects 功能允许使用 LINQ
查询访问内存中的对象,但条件是该对象类型要实现 IEnumerable 或 IEnumerable<(Of <(T>)>)。LINQ
查询提供了一种通用的数据访问模式;与标准 foreach 循环相比,它通常更加简洁,可读性更高;这种查询可提供筛选、排序和分组功能。LINQ
查询还可提高性能。有关更多信息,请参见 LINQ to Objects。
  其他功能 
  一些泛型类型具有非泛型集合类型中没有的功能。例如,List<(Of <(T>)>) 类(对应于非泛型 ArrayList 类)具有许多接受泛型委托(如允许指定搜索列表的方法的 Predicate<(Of <(T>)>) 委托、表示操作每个列表元素的 Action<(Of <(T>)>) 委托和允许定义类型之间转换的 Converter<(Of <(TInput, TOutput>)>) 委托)的方法。
  List<(Of <(T>)>) 类允许指定您自己的用于排序和搜索列表的 IComparer<(Of <(T>)>) 泛型接口实现。SortedDictionary<(Of <(TKey, TValue>)>) 和
SortedList<(Of <(TKey, TValue>)>) 类也具有此功能,此外还允许在创建集合时指定比较器。类似地,Dictionary<(Of <(TKey, TValue>)>) 和
KeyedCollection<(Of <(TKey, TItem>)>) 类允许您指定自己的相等比较器。

C# 泛型的入门理解(来自网络)的更多相关文章

  1. 一张图作为Python入门(图片来自网络)

  2. 移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”

    本系列文章引用了腾讯技术专家樊华恒<海量之道系列文章之弱联网优化>的部分章节,感谢原作者. 1.前言 随着移动互联网的高速发展,移动端IM以移动网络作为物理通信载体早已深入人心,这其中的成 ...

  3. 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口

    Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...

  4. (译)理解 LSTM 网络 (Understanding LSTM Networks by colah)

    @翻译:huangyongye 原文链接: Understanding LSTM Networks 前言:其实之前就已经用过 LSTM 了,是在深度学习框架 keras 上直接用的,但是到现在对LST ...

  5. 大白话说Java泛型:入门、使用、原理

    文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java泛型:入门.使用.原理> 远在 JDK 1.4 版本的时候,那时候是没有泛型的概念的.当时 Java 程序员们写集合类的代码都 ...

  6. 深入理解openstack网络架构(2)----Basic Use Cases

    原文地址: https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture1 译文转自: http:// ...

  7. 深入理解openstack网络架构(1)

    原文地址: https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture 译文转载自:http://b ...

  8. Atitit 泛型原理与理解attilax总结

    Atitit 泛型原理与理解attilax总结 1. 泛型历史11.1.1. 由来11.2. 为什么需要泛型,类型安全21.3. 7.泛型的好处22. 泛型的机制编辑22.1.1. 机制32.1.2. ...

  9. [转] 理解 LSTM 网络

    [译] 理解 LSTM 网络 http://www.jianshu.com/p/9dc9f41f0b29 Recurrent Neural Networks 人类并不是每时每刻都从一片空白的大脑开始他 ...

随机推荐

  1. python_22_enumerate

    a=['a','d','f','g'] for i in enumerate(a): print(i) #enumerate 把列表的下表以元组的形式取出来 #结果 # (0, 'a') # (1, ...

  2. 使用U盘引导安装CentOS

    一.制作linux引导盘 1. 格式化U盘:格式成FAT32格式 2. 安装syslinux https://www.kernel.org/pub/linux/utils/boot/syslinux/ ...

  3. java调用摄像头了

    http://www.cnblogs.com/cnweiblog/p/4602207.html

  4. ubuntu jdk install

    1.下载jdk-7u75-linux-x64.tar.gz,默认在/home/csf/Downloads 2.csf@ubuntu:~/Downloads$ sudo mkdir /usr/java ...

  5. Vscdoe技巧1

    vscdoe常用快捷键 主命令框 F1 或 Ctrl+Shift+P: 打开命令面板.在打开的输入框内,可以输入任何命令,例如: 按一下 Backspace 会进入到 Ctrl+P 模式 在 Ctrl ...

  6. MitmProxy使用

    安装 tar -zxvf mitmproxy-3.0.1-linux.tar.gz sudo mv mitmproxy mitmdump mitmweb /usr/bin 详情 https://ger ...

  7. linux通配符知识

    注意:linux通配符和三剑客(grep,awk,sed)正则表达式是不一样的,因此,代表的意义也是有较大区别的. 通配符一般用户命令行bash环境,而linux正则表达式用于grep,sed,awk ...

  8. Emgu.CV.CvInvoke的类型初始值设定项引发异常

    被这个问题蛋疼了一个下午,终于解决了.我的服务器出现这个问题的原因:可能是没有安装emgucv. 解决方法: 1.下载并安装emgucv 下载地址:链接: https://pan.baidu.com/ ...

  9. thinkphp 3.2.3 - Route.class.php 解析(路由匹配)

    class Route { public static function check(){ $depr = C('URL_PATHINFO_DEPR'); // '/' $regx = preg_re ...

  10. SHELL脚本的常规命令

    **shell脚本的执行方式: 方法一:首先赋予x权限,再输入相对路径或绝对路径,./testdot.sh或/root/shell/testdot.sh 方法二:sh testdot.sh(会新开一个 ...