返回顶部
首页 > 资讯 > 精选 >C#泛型如何应用
  • 891
分享到

C#泛型如何应用

2023-06-17 22:06:13 891人浏览 安东尼
摘要

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

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

我们在编写C#程序的时候,经常遇到两个模块的功能非常相似,只是一个是处理int类型,另一个是处理string类型,或者是其他自定义的数据类型,但我们没有其他的解决方案,只能各自写多个方法处理每个数据类型,因为方法的参数类型不同。那么是否有一个办法,在方法中传入通用的数据类型,这样就可以合并代码了。C#泛型应用正是为解决这个问题的。C#泛型应用可以解决什么样的问题呢?我们先看下面的代码,代码中省略了一些内容,但功能是实现一个栈,这个栈只能处理int数据类型:

public class Stack  {     private int[] m_item;     public int pop() {}     public void push(int item) {}     public Stack(int i) {this.m_item = new int[i]; }  }

上面的代码运行得很好,但是,如果我们需要一个栈来保存string类型的数据时呢?或许很多人都会想到把上面的代码copy一份,把int改成string就可以了。当然,这样做,是没问题的,但是如果以后需要long,node类型的栈该怎么办?继续复制?这里有种折衷的办法,是使用一个通用的数据类型object来实现这个栈:

public class Stack  {     private object[] m_item;     public object pop() {}     public void push() {}      public Stack(int o){this.m_item = new object [o]}  }

虽然这个栈很灵活,可以接收任何数据类型。但全面地说,也不是没有缺陷的,主要表现在:

◆当Stack处理值类型时,会出现装箱,拆箱操作,这将在托管堆上分配和回收大量的变量,若数据量大,则性能损失非常严重。

◆在处理引用类型时,虽然没有装箱和拆箱操作,但将用到数据类型的强制转换操作,增加了处理器的负担。

在数据类型的强制转换上还有更严重的问题,如下:

Node1 x = new Node1();  stack.push(x);  Node2 y = (Node2)stack.pop();

上面的代码在编译时是没有问题的,但是由于push了一个Node1类型的数据,但在pop时却要求转换为Node2类型,这将出现程序运行时的类型转换异常,但却逃离了编译器的检查。
针对object类型栈的问题,我们引入泛型,他可以很优雅地解决这些问题。泛型用一个通过的数据类型T来代替object,在类实例化时指定T的类型,运行时(Runtime)自动编译为本地代码,运行效率和代码质量都有很大的提高,并且保证数据类型安全

C# 泛型应用实例:

下面是使用泛型来重写上面的栈,用一个通用的数据类型T来作为一个占位符,等待在实例化时用一个实际的类型来替换。如下:

public class Stack﹤T﹥  {     private T[] m_item;     public T pop() {}     public void push(T item) {}      public Stack(int i)     {      this.m_item = new T[i];     }  }

类的写法不变,只是引入了通用数据类型T就可以适用于任何数据类型,并且类型安全的。这个类的调用方法:

Stack﹤int﹥ a = new Stack﹤int﹥(100);  a.push(10);  a.push("10"); //这里编译不通过,因为类a只接收int类型的数据  int x = a.pop();   Stack﹤string﹥ b = new Stack﹤string﹥(100);  b.push(10); //这里编译不通过,因为类b只接收string类型的数据库  b.push("10");  string y = b.pop();

这个类和object实现的类有截然不同的区别:

他是类型安全的。实例化了int类型的栈,就不能处理string类型的数据,其他数据类型也一样;

无需装箱和拆箱。这个类在实例化时,按照传入的数据类型生成本地代码,本地代码数据类型已确定,所以无需装箱和拆箱。

无需数据类型转换。

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

--结束END--

本文标题: C#泛型如何应用

本文链接: https://lsjlt.com/news/294283.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#泛型如何应用
    这篇文章主要介绍“C#泛型如何应用”,在日常操作中,相信很多人在C#泛型如何应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#泛型如何应用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!我们在编写C#程...
    99+
    2023-06-17
  • C#泛型接口实例应用
    这篇文章主要讲解了“C#泛型接口实例应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#泛型接口实例应用”吧!C# 泛型接口代码//Type parameter T&n...
    99+
    2023-06-17
  • C#泛型的应用及优点
    这篇文章主要介绍“C#泛型的应用及优点”,在日常操作中,相信很多人在C#泛型的应用及优点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#泛型的应用及优点”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!C#...
    99+
    2023-06-17
  • C#如何实现泛型类
    这篇文章主要为大家展示了“C#如何实现泛型类”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#如何实现泛型类”这篇文章吧。使用泛型集合有些人问我"面向对象编程(OOP)的承诺在哪里?&...
    99+
    2023-06-17
  • C#中如何创建和使用泛型
    在C#中,可以使用泛型来创建可以在不同数据类型下重复使用的代码。以下是在C#中创建和使用泛型的方法: 创建泛型类: public...
    99+
    2024-04-03
    C#
  • C#如何自定义泛型类
    这篇文章主要为大家展示了“C#如何自定义泛型类”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#如何自定义泛型类”这篇文章吧。Generic是Framework 2.0的新元素,中文名字称之为“...
    99+
    2023-06-18
  • Go泛型应用工厂方法及泛型使用
    目录前言接口实现泛化编程工厂+泛型来实现更通用的泛化编程泛型使用的最佳时机关于功能设计的简单建议最后前言 由于网上关于泛型使用的文章太多了,这里就不聊怎么使用泛型了,今天我们结合工厂...
    99+
    2024-04-02
  • C++如何实现泛型装饰器
    小编给大家分享一下C++如何实现泛型装饰器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!c++ 装饰器简单写了个 c++ 装饰器,主要使用的是c++ lamda ...
    99+
    2023-06-25
  • Golang泛型如何使用
    这篇文章主要介绍了Golang泛型如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang泛型如何使用文章都会有所收获,下面我们一起来看看吧。1. 泛型是什么泛型生命周期只在编译期,旨在为程序员生成代...
    99+
    2023-07-02
  • C#泛型有什么用
    这篇文章将为大家详细讲解有关C#泛型有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。泛型:即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型编程是一种编程范式,它利用“参数化类型”将类型抽象...
    99+
    2023-06-17
  • c#泛型怎么使用
    泛型是 c# 中可用于多种数据类型的类、方法和接口。它们使用类型参数充当占位符,允许泛型代码与任何类型一起使用。以下是如何使用泛型:通过关键字 where 声明类型参数和约束。...
    99+
    2024-05-14
    c#
  • Java泛型怎么应用
    本篇内容主要讲解“Java泛型怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java泛型怎么应用”吧!一、什么是泛型Java 泛型(generics)是 JDK 5 中引入的一个新特性,...
    99+
    2023-06-27
  • C#泛型详解
    这篇文章主要讲解C#中的泛型,泛型在C#中有很重要的地位,尤其是在搭建项目框架的时候。 一、什么是泛型 泛型是C#2.0推出的新语法,不是语法糖,而是2.0由框架升级提供的功能。 我...
    99+
    2024-04-02
  • C#中的泛型怎么用
    这篇文章将为大家详细讲解有关C#中的泛型怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、简介泛型现在在任何一种语言中都被认为是一个高级的强有力的术语。当我在C++中***次接触模板时,我对之有些疑...
    99+
    2023-06-17
  • C#泛型的使用案例
    有这样一个有关汽车的类。 public class Car { public int ID { get; set; } public ...
    99+
    2022-11-13
    C# 泛型 案例
  • C#中泛型类和扩展方法如何使用
    我们经常通过泛型构造函数创建泛型实例,也常调用实例的扩展方法。以下的代码在项目中随处可见: static void Main(string[] args) ...
    99+
    2022-11-13
    C# 泛型类 扩展方法
  • C#泛型集合类List<T>如何使用
    这篇“C#泛型集合类List<T>如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#泛型集合类List&...
    99+
    2023-06-30
  • 如何创建和使用 C++ 泛型函数指针?
    泛型函数指针是一种 c++++ 中指向不同类型和参数数量函数的指针。创建泛型函数指针需要使用模板,其中指定函数的返回值类型和参数类型元组。可通过以下语法使用泛型函数指针:声明函数指针,将...
    99+
    2024-04-17
    c++ 泛型函数指针 字符串数组
  • Java泛型的实际应用
    本篇内容介绍了“Java泛型的实际应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java有很多的高级特...
    99+
    2024-04-02
  • golang泛型的函数应用
    go 1.18 引入了泛型函数,支持类型参数化,增强了代码可重用性。泛型函数语法为 func 函数名[类型参数] (输入参数 类型参数) 类型参数,可使用类型参数化类型作为输入和返回类型...
    99+
    2024-04-29
    函数 泛型 golang
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作