C# 泛型的入门理解(来自网络)
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# 泛型的入门理解(来自网络)的更多相关文章
- 一张图作为Python入门(图片来自网络)
- 移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”
本系列文章引用了腾讯技术专家樊华恒<海量之道系列文章之弱联网优化>的部分章节,感谢原作者. 1.前言 随着移动互联网的高速发展,移动端IM以移动网络作为物理通信载体早已深入人心,这其中的成 ...
- 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口
Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...
- (译)理解 LSTM 网络 (Understanding LSTM Networks by colah)
@翻译:huangyongye 原文链接: Understanding LSTM Networks 前言:其实之前就已经用过 LSTM 了,是在深度学习框架 keras 上直接用的,但是到现在对LST ...
- 大白话说Java泛型:入门、使用、原理
文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java泛型:入门.使用.原理> 远在 JDK 1.4 版本的时候,那时候是没有泛型的概念的.当时 Java 程序员们写集合类的代码都 ...
- 深入理解openstack网络架构(2)----Basic Use Cases
原文地址: https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture1 译文转自: http:// ...
- 深入理解openstack网络架构(1)
原文地址: https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture 译文转载自:http://b ...
- Atitit 泛型原理与理解attilax总结
Atitit 泛型原理与理解attilax总结 1. 泛型历史11.1.1. 由来11.2. 为什么需要泛型,类型安全21.3. 7.泛型的好处22. 泛型的机制编辑22.1.1. 机制32.1.2. ...
- [转] 理解 LSTM 网络
[译] 理解 LSTM 网络 http://www.jianshu.com/p/9dc9f41f0b29 Recurrent Neural Networks 人类并不是每时每刻都从一片空白的大脑开始他 ...
随机推荐
- Nginx+proxy实现简单的负载均衡
环境说明:操作系统centos6.6 64位web操纵系统是:web1=192.168.10.10(LAMP) web2=192.168.10.11(LNMP),这里只是测试nginx实现负载均衡效果 ...
- flush caches
- Luogu [P1958] 上学路线_NOI导刊2009普及(6)
上学路线_NOI导刊2009普及(6) 题目详见:上学路线_NOI导刊2009普及(6) 这是一道基础的DFS(深搜)题,堪称模板,是新手练习搜索与回溯的好题选. 大致思路:从(1,1)开始搜索,每次 ...
- java菜鸟的Python学习之路(1)
学习一门新的语言,应当抓住语言的共有特性,这样容易触类旁通,学习起来也十分的快捷愉悦 而语言的特性大约有以下元素 变量定义与类型 算术符号与逻辑符号 for 循环与 while 循环 数组,线性表等一 ...
- Access数据库远程连接的实用方法
一般在远程文件夹开启文件共享即可通过像平常一样用连接字符串访问,注意共享的读写权限. 远程(如通过互联网)连接access数据库的示例: 首先,需要使用TCP/IP,ADO及XML(需要安装Micro ...
- 委托、事件与Observer设计模式
范例说明 上面的例子已不足以再进行下面的讲解了,我们来看一个新的范例,因为之前已经介绍了很多的内容,所以本节的进度会稍微快一些: 假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候:1. ...
- tomcat的启动和部署
方法/步骤 1 一.安装JDK和Tomcat 1,安装JDK:直接运行jdk-7-windows-i586.exe可执行程序,默认安装即可. 备注:路径可以其他盘符,不建议路径包含中文名及特殊符号. ...
- ARC机制中的Strong和weak
什么是ARC Automatic Reference Counting,自动引用计数,即ARC,可以说是WWDC2011和iOS5所引入的最大的变革和最激动人心的变化.ARC是新的LLVM 3.0编译 ...
- mybatis的环境搭建
mybatis是一个持久层框架,其主要思想就是想将程序中大量的SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置. 使得SQL与程序代码分离,即在不修改程序代码的情况下,直接在配置文件中修改S ...
- MongDB之各种新增操作
接口IMongDaoCreate: package com.net.test.mongdb.dao; import java.util.List; import com.net.test.mongdb ...