解释泛型在 C# 中的工作原理

解释泛型在 c# 中的工作原理

泛型是在 C# 2.0 版本中添加的,是该语言中最重要的概念之一。它们使您能够编写在编译时类型安全的可重用、高性能代码。使用泛型,您可以在代码中使用某种类型,而无需事先了解该类型。

泛型在 .NET 中的许多地方使用,包括集合、委托和异步代码。使用泛型,您不需要事先知道集合的大小,并且可以将泛型与任何元素类型一起使用,甚至是特定于您的代码的自定义数据类型。 C# 提供对泛型类型(类、接口等)和泛型方法的支持。

在泛型中,您有类型参数和类型参数。这类似于具有参数的方法,您可以将参数传递给该方法。

泛型类型

声明泛型类型的语法由位于尖括号中的类型参数组成。类型的名称。例如,Locator 是下面示例中的泛型类。

public class Locator{}

要创建 Locator 的实例,请使用 new 关键字,后跟类的名称。但是,您可以指定要作为参数传递的实际类型,而不是 T。以下示例将字符串类型作为参数传递。

var stringLocator = new Locator();

您可以在类方法上使用类型参数 (T),如下例所示。

public class Locator{   public IList Items { get; set; }      public T Locate(int index){      return Items[index];   }}var stringLocator = new Locator();string item = stringLocator.Locate(2);

泛型的另一个好处是编辑器提供的 IntelliSense。当您在 Visual Studio 或 VS Code 中键入 stringLocator.Locate(4) 并将鼠标悬停在方法名称上时;它会显示它返回一个字符串而不是 T。如果您尝试将结果分配给字符串以外的任何类型,编译器将引发错误。例如,

// Error: Cannot implicitly convert type 'string' to 'int' [c-sharp]csharp(CS0029)int item = stringLocator.Locate(2);

从泛型基类型或泛型接口继承时,泛型类型可以使用类型形参作为类型实参。通用 LinkedList 类型实现通用 IEnumerable 接口以及其他接口。

public class LinkedList : IEnumerable

泛型方法

泛型方法只是声明类型参数的方法,您可以在方法内部使用该类型参数并将其用作参数和返回类型。在下面的示例中,Swap 是一个泛型方法,它采用两个 T 类型的参数并返回 T 的实例。

public class Swapper{   public T Swap(T first, T second){      T temp = first;      first = second;      second = temp;      return temp;   }}

与泛型类型一样,当您调用泛型方法时,它将返回一个强类型变量。

var swapper = new Swapper();int result = swapper.Swap(5, 3);

可以有多个通用参数。 System.Collections.Generic 命名空间中的 Dictionary 类有两个类型参数,即键和值。

public class Dictionary

最后,了解什么是通用的很重要。对于类型来说,除了枚举之外,一切都可以是泛型的。其中包括 –

类结构接口委托

对于类型成员,只有方法和嵌套类型可以是泛型的。以下成员不能是通用的 –

字段属性索引器构造函数 li>事件终结器

示例

 现场演示

using System;using System.Collections.Generic;class Program{   static void Main(){      var stringLocator = new Locator(){         Items = new string[] { "JavaScript", "CSharp", "Golang" }      };      string item = stringLocator.Locate(1);      Console.WriteLine(item); // CSharp      var swapper = new Swapper();      int a = 5, b = 3;      int result = swapper.Swap(ref a, ref b);      Console.WriteLine($"a = {a}, b = {b}");   }}public class Locator{   public IList Items { get; set; }   public T Locate(int index){      return Items[index];   }}public class Swapper{   public T Swap(ref T first, ref T second){      T temp = first;      first = second;      second = temp;      return temp;   }}

输出

CSharpa = 3, b = 5

以上就是解释泛型在 C# 中的工作原理的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1435011.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
C#中快速将Decimal转换为其他基数
上一篇 2025年12月17日 10:31:22
在 C# 中使您的集合线程安全
下一篇 2025年12月17日 10:31:56

相关推荐

  • Linux怎么限制用户不能登录系统

    答案:限制Linux用户登录的核心方法是修改登录Shell或锁定密码。通过chsh命令将Shell设为/sbin/nologin或/bin/false,可阻止用户获得交互式Shell;使用passwd -l命令锁定密码,在/etc/shadow中添加!标记;也可用chage设置账户过期时间实现自动禁…

    2026年9月12日
    200
  • PCIe5.0SSD速度对比:三星990Provs西部数据BlackSN850X

    三星990 pro和西部数据black sn850x的性能差异主要体现在顺序读取速度和耐用性上:1. 三星990 pro的顺序读取速度为10,000 mb/s,略高于西部数据black sn850x的7,300 mb/s;2. 三星990 pro的tbw为1200tb,远高于西部数据black sn…

    2026年9月12日
    000
  • vivo浏览器耗电量太大是什么原因_vivo浏览器耗电过高的原因及优化方法

    vivo浏览器耗电高因信息流推送、后台活动等所致,可通过关闭首页推荐与通知、限制后台高耗电、禁止自启动、清理缓存数据来优化,降低电量消耗。 如果您发现vivo手机上的浏览器应用在使用或后台运行时消耗了大量电量,这可能是由于信息流推送、自动刷新和后台活动等功能导致的。以下是排查和优化该问题的具体方法。…

    2026年9月12日
    600
  • 小米 15 Ultra充电慢怎么办 Xiaomi 15 Ultra快充优化

    使用原装67W以上充电器和数据线,清理接口灰尘并避免极端温度,关闭省电模式且减少充电时后台活动,可解决小米15 Ultra充电慢问题。 小米15 Ultra充电慢,核心是确保快充协议匹配和硬件状态良好。关键点在于使用原装67W或更高功率的充电器与数据线,并保持充电接口清洁。系统设置和环境温度也有影响…

    2026年9月12日
    200
  • windows10如何禁用或开启触摸屏功能_windows10触摸屏设置教程

    可通过设备管理器、专用工具或注册表编辑器关闭Windows 10触摸屏。1、在设备管理器中找到“符合HID标准的触摸屏”,右键选择禁用或启用设备;2、使用厂商提供的专用工具(如联想Quick Fix)实现永久禁用;3、通过注册表编辑器修改HidTouch服务的Start值为4以禁用,设为1可重新启用…

    2026年9月12日
    000
  • 又一历史性时刻!华为乾崑智驾ADS避免可能碰撞超300万次

    10月23日,华为乾崑智能汽车解决方案官方微博发布消息,宣布华为乾崑智驾ads已累计避免可能的碰撞超300万次! 官方表示:“每一次化险为夷的背后,都离不开全维防碰撞系统CAS 4.0的五维安全守护。未来,华为乾崑智驾ADS将继续护好每一程,让出行更安全、生活更美好。” 以问界M9为例,该车型搭载了…

    2026年9月12日
    000
  • Java中如何设计统一的异常响应结构

    统一异常响应结构通过定义Result类、枚举错误码、自定义异常和@ControllerAdvice全局处理,实现API返回一致性。1. 创建Result封装返回数据;2. 定义ErrorCode枚举管理错误码;3. 设计BusinessException携带错误信息;4. 使用@Controller…

    2026年9月12日
    400
  • 多店铺客服接待混乱?智能客服能否一键接入淘宝/京东/抖音平台?告别多平台切换!1个智能客服搞定淘宝/京东/抖音,响应速度UP!

    还在为淘宝、京东、抖音等多平台客服接待手忙脚乱?消息分散、效率低下、客户流失正困扰着每一个多店铺运营的商家!晓多智能客服系统带来革命性解决方案——一键接入淘宝/京东/抖音等6大平台,将所有咨询集中到统一工作台,彻底告别窗口切换的烦恼。通过ai智能预判分流+动态优先级管理,重要客户不再错过,响应速度提…

    2026年9月12日
    100
  • 小红书直播多久出单?直播出单有什么技巧?

    小红书直播带货正成为内容创作者变现的新蓝海,但不少人在开播后面临“有流量没订单”的尴尬。究竟直播多长时间才能迎来首单?怎样做才能加速转化?本文为你拆解出单周期规律,并分享高效出单策略,助你快速打破零成交困局。 一、小红书直播多久能出第一单? 出单时间因人而异,没有统一标准。有人刚开播几分钟就成交,也…

    2026年9月12日
    300
  • 为什么VSCode是开发者的首选编辑器?

    VSCode成为开发者首选因其轻量高效、启动快、资源占用低,基于Electron构建却优化出色,支持快速搜索、符号跳转、多光标编辑,原生集成Git,拥有海量扩展生态,覆盖主流语言与开发工具,通过Language Server Protocol实现智能补全与调试,配置灵活,跨平台开源免费,微软持续维护…

    2026年9月12日
    100
  • 全明星街球派对新球星唐斯玩法信息爆料

    全明星街球派对新球星唐斯玩法信息爆料全明星街球派对新球星唐斯玩法信息爆料全明星街球派对新球星唐斯玩法信息爆料全明星街球派对新球星唐斯玩法信息爆料

    全明星街球派对迎来重磅新星——唐斯!这位中锋打破传统,以巨兽身材玩转技术流,外线三分自带缩圈,背打连招灵活多变,还能卡位造僵直为队友创造机会。大招开启直接变身三分狂魔,五点开花秀翻全场!10月22日更新后,快来体验这位“空间型中锋”的无限可能! 全明星街球派对新球星唐斯玩法信息爆料 球星早知道,米宝…

    2026年9月12日 用户投稿
    100
  • YII框架的漏洞扫描是什么?YII框架如何检查安全漏洞?

    答案是进行YII框架漏洞扫描需从代码审计、安全工具扫描、版本更新、服务器配置、权限控制、日志监控和错误处理入手,重点防范SQL注入、XSS、CSRF和文件上传漏洞,通过参数绑定、HTML编码、启用CSRF保护及定期渗透测试等措施提升安全性。 YII框架的漏洞扫描,简单来说,就是检测你的YII项目是否…

    2026年9月12日
    100
  • 景嘉微JM9系列显卡:国产图形芯片性能实测

    景嘉微jm9系列显卡在国产图形芯片市场上表现出色,性能测试中在图形处理和计算能力方面有显著提升。1)jm9系列在3dmark等基准测试中得分优异,渲染复杂图形时表现高效。2)相比国际品牌,jm9系列在性价比和特定应用如科学计算和图形处理方面有一定优势。3)在实际应用中,jm9系列适合日常办公、视频编…

    2026年9月12日
    000
  • 夸克浏览器字体显示异常怎么办 夸克浏览器字体渲染问题修复方法

    夸克浏览器字体显示异常怎么办 夸克浏览器字体渲染问题修复方法夸克浏览器字体显示异常怎么办 夸克浏览器字体渲染问题修复方法夸克浏览器字体显示异常怎么办 夸克浏览器字体渲染问题修复方法夸克浏览器字体显示异常怎么办 夸克浏览器字体渲染问题修复方法

    清理夸克浏览器缓存和数据,修复因缓存损坏导致的字体解析异常;2. 检查并恢复系统默认字体设置,避免非标准字体影响渲染;3. 关闭省流加速模式,防止字体文件被压缩或拦截;4. 更新浏览器至最新版本,修复旧版存在的兼容性问题;5. 尝试切换桌面模式或重置内核配置,提升网页字体显示效果。若问题持续,建议更…

    2026年9月12日 用户投稿
    000
  • Outlook如何配置多账户_Outlook多账户的切换管理

    首先添加多个邮箱账户,进入Outlook文件菜单点击添加账户并完成验证;接着设置默认发送账户,在邮件选项中选择新邮件使用的默认账户;撰写邮件时可手动切换发件账户,通过消息选项卡的“从”字段选择目标账户;为快速查看不同账户邮件,可在导航窗格直接访问各收件箱或使用Ctrl+Tab快捷键切换;最后通过分配…

    2026年9月12日
    000
  • 为什么高DPI鼠标需要相应 poll rate 配合?

    高DPI鼠标需高刷新率配合,否则精细移动数据会因传输频率低而丢失,导致光标跳跃、延迟和精度下降,尤其在快速操作或精细控制场景下更为明显。 高DPI鼠标之所以需要相应的高刷新率(poll rate)配合,核心原因在于,如果鼠标传感器能够检测到极其精细的移动(高DPI),但它向电脑报告这些移动的频率却很…

    2026年9月12日
    000
  • Java中声明和管理类静态成员(“全局”变量)的最佳实践

    本文深入探讨了在java中通过static关键字声明类静态成员(常被称为“全局”变量或数组)的方法。文章强调了在设计时应尽量减少对全局状态的依赖,以提升代码的可维护性、可测试性和线程安全性。通过一个前缀和计算的示例,展示了如何优化代码结构,优先使用局部变量和函数返回值,从而避免共享可变状态带来的潜在…

    2026年9月12日
    000
  • 豆包Ai网页端官方入口_豆包Ai官网网页版地址

    豆包AI网页端官方入口是https://www.doubao.com/chat/,支持智能对话、图文生成、文档处理和编程辅助,提供网页版、客户端及移动应用多端访问。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 豆包Ai网页端官方入口在哪里…

    2026年9月12日
    000
  • 如何在mysql中开发任务分配管理系统

    答案:基于MySQL设计任务分配系统需构建用户表和任务表,通过assignee_id关联实现任务分配;利用SQL完成任务的增删改查操作;结合角色字段控制权限,管理员可管理所有任务,普通成员仅限个人任务;支持项目分类、评论、日志等扩展功能,并在关键字段创建索引以提升查询性能。 在 MySQL 中开发任…

    2026年9月12日
    000
  • 红米Note 13充电发烫怎么处理 红米Note 13温控优化技巧

    红米Note 13充电发热多属正常,使用快充时更明显;若温度过高,可通过关闭后台应用、限制自启动权限、开启智能充电保护来降低功耗;充电时取下手机壳、避免边充边玩、选择通风环境、使用原装充电器可改善散热;发烫严重时应暂停使用、关机冷却,辅以冰袋降温,并清理充电口灰尘,有效控制温度并保护电池健康。 红米…

    2026年9月12日
    000

发表回复

登录后才能评论
关注微信