• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#的泛型方法解析

C#的泛型方法解析

作者:彭泽0902 字体:[增加 减小] 来源:互联网 时间:2017-05-28

彭泽0902 通过本文主要向大家介绍了c#泛型方法,c#中泛型方法,c#泛型,c#泛型编程,c#泛型详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

C#2.0引入了泛型这个特性,由于泛型的引入,在一定程度上极大的增强了C#的生命力,可以完成C#1.0时需要编写复杂代码才可以完成的一些功能。但是作为开发者,对于泛型可谓是又爱又恨,爱的是其强大的功能,以及该特性带来的效率的提升,恨的是泛型在复杂的时候,会呈现相当复杂的语法结构。这种复杂不仅是对于初学者,对于一些有开发经验的.NET开发者,也是一个不那么容易掌握的特性。

   接下来我们来了解一下C#2.0加入的特性:泛型。

一.泛型的基本特性概述:

    在实际项目开发中,任何API只要将object作为参数类型和返回类型使用,就可能在某个时候涉及强类型转换。提到强类型转换,估计很多开发者第一反应就是“效率”这个次,对于强类型的利弊主要看使用者使用的环境,天底下没有绝对的坏事,也没有绝对的好事,有关强类型的问题不是本次的重点,不做重点介绍。

    泛型是CLR和C#提供的一种特殊机制,支持另一种形式的代码重用,即“算法重用”。泛型实现了类型和方法的参数化,泛型类型和方法也可以让参数告诉使用者使用什么类型。

    泛型所带来的好处:更好的编译时检查,更多在代码中能直接表现的信息,更多的IDE支持,更好的性能。可能有人会疑问,为什么泛型会带来这么多好处,使用一个不能区分不同类型的常规API,相当于在一个动态环境中访问那个API。

    CLR允许创建泛型引用和泛型值类型,但是不允许创建泛型枚举,并且CLR允许创建泛型接口和泛型委托,CLR允许在引用类型、值类型或接口中定义泛型方法。定义泛型类型或方法时,为类型指定了任何变量(如:T)都称为类型参数。(T是一个变量名,在源代码中能够使用一个数据类型的任何位置,都可以使用T)在C#中泛型参数变量要么成为T,要么至少一大写T开头。

二.泛型类、泛型接口和泛型委托概述:

   1.泛型类:

    泛型类型仍然是类型,所以可以从任何类型派生。使用一个泛型类型并指定类型实参时,实际是在CLR中定义一个新类型对象,新类型对象是从泛型派生自的那个类型派生的。使用泛型类型参数的一个方法在基尼险那个JIT编译时,CLR获取IL,用指定的类型实参进行替换,然后创建恰当的本地代码。

    如果没有为泛型类型参数提供类型实参,那就么就是未绑定泛型类型。如果指定了类型实参,该类型就是已构造类型。已构造类型可以是开发或封闭的,开发类型还包含一个类ixngcanshu,而封闭类型则不是开发的,类型的每个部分都是明确的。所有代码实际都是在一个封闭的已构造类型的上下文中执行。

   泛型类在.NET的应用主要在集合类中,大多数集合类在System.Collections.Generic和System.Collections.ObjectModel类中。下面简单的介绍一种泛型集合类:

     (1).SynchronizedCollection:提供一个线程安全集合,其中包含泛型参数所指定类型的对象作为元素.

 [ComVisible(false)]
 public class SynchronizedCollection<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
 {
 /// <summary>
 /// 初始化 <see cref="T:System.Collections.Generic.SynchronizedCollection`1"/> 类的新实例。
 /// </summary>
 public SynchronizedCollection();
 /// <summary>
 /// 通过用于对线程安全集合的访问进行同步的对象来初始化 <see cref="T:System.Collections.Generic.SynchronizedCollection`1"/> 类的新实例。
 /// </summary>
 /// <param name="syncRoot">用于对线程安全集合的访问进行同步的对象。</param><exception cref="T:System.ArgumentNullException"><paramref name="syncRoot"/> 为 null。</exception>
 public SynchronizedCollection(object syncRoot);
 /// <summary>
 /// 使用指定的可枚举元素列表和用于对线程安全集合的访问进行同步的对象来初始化 <see cref="T:System.Collections.Generic.SynchronizedCollection`1"/> 类的新实例。
 /// </summary>
 /// <param name="syncRoot">用于对线程安全集合的访问进行同步的对象。</param><param name="list">用于初始化线程安全集合的元素的 <see cref="T:System.Collections.Generic.IEnumerable`1"/> 集合。</param><exception cref="T:System.ArgumentNullException"><paramref name="syncRoot"/> 或 <paramref name="list"/> 为 null。</exception>
 public SynchronizedCollection(object syncRoot, IEnumerable<T> list);
 /// <summary>
 /// 使用指定的元素数组和用于对线程安全集合的访问进行同步的对象来初始化 <see cref="T:System.Collections.Generic.SynchronizedCollection`1"/> 类的新实例。
 /// </summary>
 /// <param name="syncRoot">用于对线程安全集合的访问进行同步的对象。</param><param name="list">用于初始化线程安全集合的 <paramref name="T"/> 类型元素的 <see cref="T:System.Array"/>。</param><exception cref="T:System.ArgumentNullException"><paramref name="syncRoot"/> 或 <paramref name="list"/> 为 null。</exception>
 public SynchronizedCollection(object syncRoot, params T[] list);
 /// <summary>
 /// 将项添加到线程安全只读集合中。
 /// </summary>
 /// <param name="item">要添加到集合的元素。</param><exception cref="T:System.ArgumentException">设置的值为 null,或者不是集合的正确泛型类型 <paramref name="T"/>。</exception>
 public void Add(T item);
 /// <summary>
 /// 从集合中移除所有项。
 /// </summary>
 public void Clear();
 /// <summary>
 /// 从特定索引处开始,将集合中的元素复制到指定的数组。
 /// </summary>
 /// <param name="array">从集合中复制的 <paramref name="T "/>类型元素的目标 <see cref="T:System.Array"/>。</param><param name="index">复制开始时所在的数组中的从零开始的索引。</param>
 public void CopyTo(T[] array, int index);
 /// <summary>
 /// 确定集合是否包含具有特定值的元素。
 /// </summary>
 /// 
 /// <returns>
 /// 如果在集合中找到元素值,则为 true;否则为 false。
 /// </returns>
 /// <param name="item">要在集合中定位的对象。</param><exception cref="T:System.ArgumentException">设置的值为 null,或者不是集合的正确泛型类型 <paramref name="T"/>。</exception>
 public bool Contains(T item);
 /// <summary>
 /// 返回一个循环访问同步集合的枚举数。
 /// </summary>
 /// 
 /// <returns>
 /// 一个 <see cref="T:System.Collections.Generic.IEnumerator`1"/>,用于访问集合中存储的类型的对象。
 /// </returns>
 public IEnumerator<T> GetEnumerator();
 /// <summary>
 /// 返回某个值在集合中的第一个匹配项的索引。
 /// </summary>
 /// 
 /// <returns>
 /// 该值在集合中的第一个匹配项的从零开始的索引。
 /// </returns>
 /// <param name="item">从集合中移除所有项。</param><exception cref="T:System.ArgumentException">设置的值为 null,或者不是集合的正确泛型类型 <paramref name="T"/>。</exception>
 public int IndexOf(T item);
 /// <summary>
 /// 将一项插入集合中的指定索引处。
 /// </summary>
 /// <param name="index">要从集合中检索的元素的从零开始的索引。</param><param name="item">要作为元素插入到集合中的对象。</param><exception cref="T:System.ArgumentOutOfRangeException">指定的 <paramref name="index"/> 小于零或大于集合中的项数。</exception><exception cref="T:System.ArgumentException">设置的值为 null,或者不是集合的正确泛型类型 <paramref name="T"/>。</exception>
 public void Insert(int index, T item);
 /// <summary>
 /// 从集合中移除指定项的第一个匹配项。
 /// </summary>
 /// 
 /// <returns>
 /// 如果从集合中成功移除了项,则为 true;否则为 false。
 /// </returns>
 /// <param name="item">要从集合中移除的对象。</param>
 public bool Remove(T item);
 /// <summary>
 /// 从集合中移除指定索引处的项。
 /// </summary>
 /// <param name="index">要从集合中检索的元素的从零开始的索引。</param><exception cref="T:System.ArgumentOutOfRangeException">指定的 <paramref name="index"/> 小于零或大于集合中的项数。</exception>
 public void RemoveAt(int index);
 /// <summary>
 /// 从集合中移除所有项。
 /// </summary>
 protected virtual void ClearItems();
 /// <summary>
 /// 将一项插



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#的泛型方法解析
  • C#泛型Dictionary的用法实例详解
  • c#泛型序列化对象为字节数组的示例
  • C# 泛型的简单理解(安全、集合、方法、约束、继承)分享
  • C#泛型编程介绍
  • 浅谈C#泛型的用处与特点
  • 浅谈C#2.0泛型中的变化:default关键字
  • C#泛型相关讲解
  • C# 泛型深入理解介绍

相关文章

  • 2017-05-28解析如何使用反射调用类型成员 方法,字段,属性
  • 2017-05-28C#、vb.net及SQL判断指定年份是否为闰年的方法
  • 2017-05-28c# winform 关闭窗体时同时结束线程实现思路
  • 2017-05-28C#从实体对象集合中导出Excel的代码
  • 2017-05-28C#根据反射和特性实现ORM映射实例分析
  • 2017-05-28C#零基础学习理解委托
  • 2017-05-28微信服务号推送模板消息接口
  • 2017-05-28关于c#二叉树的实现
  • 2017-05-28c# StringBuilder.Replace 方法 (Char, Char, Int32, Int32)
  • 2017-05-28C#中把英文字母转换为大写或小写的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#实现json的序列化和反序列化实例代码
    • c#使用Dataset读取XML文件动态生成菜单的方法
    • C#导出GridView数据到Excel文件类实例
    • C#实现两个richtextbox控件滚动条同步滚动的简单方法
    • C#中Byte[]和String之间转换的方法
    • C# 创建,读取,写入XML文件
    • C#聊天程序服务端与客户端完整实例代码
    • DevExpress之饼状图突出(Explode)设置实例
    • 动态webservice调用接口并读取解析返回结果
    • C#实现图像反色的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有