我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#泛型的应用及优点

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#泛型的应用及优点

这篇文章主要介绍“C#泛型的应用及优点”,在日常操作中,相信很多人在C#泛型的应用及优点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#泛型的应用及优点”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

C# 泛型应用分析

因为 IL 和 CLR 为泛型提供本机支持,所以大多数符合 CLR 的语言都可以利用一般类型。例如,下面这段 Visual Basic .NET 代码使用代码块 2 的一般堆栈:

Dim stack As Stack(Of Integer)  stack = new Stack(Of Integer)  stack.Push(3)  Dim number As Integer  number = stack.Pop()

您可以在类和结构中使用泛型。以下是一个有用的一般点结构:

public struct Point  {          public T X;          public T Y;  }

可以使用该一般点来表示整数坐标,例如:

Point point;  point.X = 1;  point.Y = 2;

或者,可以使用它来表示要求浮点精度的图表坐标:

Point point;  point.X = 1.2;  point.Y = 3.4;

除了到目前为止介绍的基本泛型语法以外,C# 2.0 还具有一些泛型特定的语法。例如,请考虑代码块 2 的 Pop() 方法。假设您不希望在堆栈为空时引发异常,而是希望返回堆栈中存储的类型的默认值。如果您使用基于 Object 的堆栈,则可以简单地返回 null,但是您还可以通过值类型来使用一般堆栈。为了解决该问题,您可以使用 default() 运算符,它返回类型的默认值。

下面说明如何在 Pop() 方法的实现中使用默认值:

public T Pop()  {     m_StackPointer--;     if(m_StackPointer >= 0)     {        return m_Items[m_StackPointer];     }     else    {        m_StackPointer = 0;        return default(T);     }  }

引用类型的默认值为 null,而值类型(例如,整型、枚举和结构)的默认值为全零(用零填充相应的结构)。因此,如果堆栈是用字符串构建的,则 Pop() 方法在堆栈为空时返回 null;如果堆栈是用整数构建的,则 Pop() 方法在堆栈为空时返回零。

C# 泛型应用之多个一般类型

单个类型可以定义多个一般类型参数。例如,请考虑代码块 3 中显示的一般链表。

C# 泛型应用代码块之一般链表

class Node  {     public K Key;     public T Item;     public Node NextNode;     public Node()     {        Key      = default(K);        Item     = defualt(T);        NextNode = null;     }     public Node(K key,T item,Node nextNode)     {        Key      = key;        Item     = item;        NextNode = nextNode;     }  }   public class LinkedList  {     Node m_Head;     public LinkedList()     {        m_Head = new Node();     }     public void AddHead(K key,T item)     {        Node newNode = new Node(key,item,m_Head.NextNode);        m_Head.NextNode = newNode;     }  }

该链表存储节点:

class Node  {...}

每个节点都包含一个键(属于一般类型参数 K)和一个值(属于一般类型参数 T)。每个节点还具有对该列表中下一个节点的引用。链表本身根据一般类型参数 K 和 T 进行定义:

public class LinkedList  {...}

这使该列表可以公开像 AddHead() 一样的一般方法:

public void AddHead(K key,T item);

每当您声明使用泛型的类型的变量时,都必须指定要使用的类型。但是,指定的类型实参本身可以为一般类型参数。例如,该链表具有一个名为 m_Head 的 Node 类型的成员变量,用于引用该列表中的第一个项。m_Head 是使用该列表自己的一般类型参数 K 和 T 声明的。

Node m_Head;

您需要在实例化节点时提供类型实参;同样,您可以使用该链表自己的一般类型参数:

public void AddHead(K key,T item)  {     Node newNode = new Node<K,T>(key,item,m_Head.NextNode);     m_Head.NextNode = newNode;  }

请注意,该列表使用与节点相同的名称来表示一般类型参数完全是为了提高可读性;它也可以使用其他名称,例如:

public class LinkedList  {...}

或:

public class LinkedList  {...}

在这种情况下,将 m_Head 声明为:

Node m_Head;

当客户端使用该链表时,该客户端必须提供类型实参。该客户端可以选择整数作为键,并且选择字符串作为数据项:

LinkedList list = new LinkedList();  list.AddHead(123,"AAA");

但是,该客户端可以选择其他任何组合(例如,时间戳)来表示键:

LinkedList list = new LinkedList();  list.AddHead(DateTime.Now,"AAA");

有时,为特定类型的特殊组合起别名是有用的。可以通过 using 语句完成该操作,如代码块 4 中所示。请注意,别名的作用范围是文件的作用范围,因此您必须按照与使用 using 命名空间相同的方式,在项目文件中反复起别名。

C# 泛型应用代码块之 一般类型别名

using List = LinkedList;   class ListClient  {     static void Main(string[] args)     {        List list = new List();        list.AddHead(123,"AAA");     }  }

到此,关于“C#泛型的应用及优点”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#泛型的应用及优点

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#泛型的应用及优点

这篇文章主要介绍“C#泛型的应用及优点”,在日常操作中,相信很多人在C#泛型的应用及优点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#泛型的应用及优点”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!C#
2023-06-17

C#泛型如何应用

这篇文章主要介绍“C#泛型如何应用”,在日常操作中,相信很多人在C#泛型如何应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#泛型如何应用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!我们在编写C#程
2023-06-17

浅谈C#泛型的用处与特点

泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候
2022-11-15

C#泛型接口实例应用

这篇文章主要讲解了“C#泛型接口实例应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#泛型接口实例应用”吧!C# 泛型接口代码//Type parameter T in angle br
2023-06-17

Go泛型应用工厂方法及泛型使用实例分析

本篇内容介绍了“Go泛型应用工厂方法及泛型使用实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!接口实现泛化编程平时我们编写结构体和方法
2023-07-02

C#泛型的使用案例

这篇文章介绍了C#泛型的使用案例,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

C#中的泛型怎么用

这篇文章将为大家详细讲解有关C#中的泛型怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、简介泛型现在在任何一种语言中都被认为是一个高级的强有力的术语。当我在C++中***次接触模板时,我对之有些疑
2023-06-17

golang泛型的函数应用

go 1.18 引入了泛型函数,支持类型参数化,增强了代码可重用性。泛型函数语法为 func 函数名[类型参数] (输入参数 类型参数) 类型参数,可使用类型参数化类型作为输入和返回类型。如 min[t number] (a, b t) t
golang泛型的函数应用
2024-04-29

C++ 递归函数的泛型编程应用场景?

泛型递归函数通过模板定义,允许函数在指定类型时定义其行为。例如,泛型函数 find 可用于在链表中查找元素,它接受链表指针和目标值作为参数,直到找到目标值或到达链表末尾。C++ 递归函数的泛型编程应用场景递归是一种常见的编程技术,它允许函
C++ 递归函数的泛型编程应用场景?
2024-04-17

C#泛型集合的相关知识点整理

这篇文章主要讲解了“C#泛型集合的相关知识点整理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#泛型集合的相关知识点整理”吧!为什么要用C#泛型集合?在C# 2.0之前,主要可以通过两种方
2023-06-17

Java中的泛型怎么应用

本篇内容介绍了“Java中的泛型怎么应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!泛型概述泛型在java中有很重要的地位,在面向对象编程
2023-06-02

Golang泛型的定义与应用

go 1.18 中引入了泛型,可创建独立于类型的代码。泛型使用方括号 [] 定义类型参数,如 func sort[t any](arr []t)。go 编译器可以推断类型参数,如 func swap[t](x, y t)。泛型可用于构建数据
Golang泛型的定义与应用
2024-04-04

模板库和泛型库在 C++ 泛型编程中的作用?

模板库和泛型库通过允许数据类型参数化和提供预定义的模板来实现泛型编程,提高了代码的可复用性和灵活性,包括:模板库:提供模板声明机制,创建根据数据类型参数化的类型或函数,例如 std::vector 模板容器。泛型库:提供预定义的模板函数和类
模板库和泛型库在 C++ 泛型编程中的作用?
2024-04-24

C#接口的特点及应用

这篇文章主要介绍“C#接口的特点及应用”,在日常操作中,相信很多人在C#接口的特点及应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#接口的特点及应用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!C#
2023-06-17

golang函数类型的广泛应用

go语言中的函数类型允许将函数作为参数或返回值传递,实现灵活的代码。它包括:函数类型声明:func(*argtypes) returntype传递函数作为参数:将函数类型作为其他函数的参数,传递行为。使用函数类型作为返回值:返回函数类型,增
golang函数类型的广泛应用
2024-04-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录