0

0

C# 泛型使用方法 C#如何创建和使用泛型类

畫卷琴夢

畫卷琴夢

发布时间:2026-03-03 08:43:53

|

246人浏览过

|

来源于php中文网

原创

泛型类必须显式声明类型参数如class mylist,漏写、未约束使用new t()或在实例化时省略具体类型均会编译失败;where约束决定t的操作权限;list与list运行时为不同类型。

c# 泛型使用方法 c#如何创建和使用泛型类

泛型类定义必须带 T 类型参数声明

不声明类型参数就写 class MyList,编译器会报错:「使用泛型类型需要 <t></t>」。C# 要求所有泛型类显式声明类型形参,最简形式是 class MyList<t></t>,其中 T 是占位符(可换为 UItem 等,但 T 是约定俗成的单字母命名)。

常见错误包括:

  • 漏写 <t></t> 直接在类体内用 T —— 编译失败
  • 在类名后加了 <t></t>,但方法里仍用 object —— 失去泛型意义
  • T 当具体类型写进字段初始化,如 private T _value = new T(); —— 除非加 where T : new() 约束,否则编译不通过

where 约束决定你能对 T 做什么操作

没有约束时,T 只能调用 object 的成员(如 ToString()Equals()),不能调用 .Length、不能 new T()、不能用 > 比较。要解锁能力,必须加 where 子句:

  • where T : class → 允许赋值为 null,可用引用类型特有语法
  • where T : struct → 限定为值类型,可安全使用 default(T)
  • where T : IComparable → 支持 CompareTo,可用于排序逻辑
  • where T : new() → 允许在内部写 new T()
  • where T : BaseClass, IInterface → 多重约束,用逗号分隔

注意:where T : IDisposable 不代表 T 实例能直接调用 Dispose() —— 必须用 using 或显式转型才生效。

实例化泛型类必须指定具体类型,不能留空

var list = new List(); 是非法的;C# 不支持“运行时推导泛型类型”。必须明确写出具体类型,例如:

var numbers = new List<int>();
var names = new Dictionary<string, Person>();
var stack = new Stack<DateTime>();

即使构造函数参数能推断类型(如 new List<int> { 1, 2, 3 }</int>),尖括号里的类型也不能省略。VS 有时会高亮建议“可简化”,但那是针对泛型方法的类型推导,不适用于类实例化。

千博购物系统.Net
千博购物系统.Net

千博购物系统.Net能够适合不同类型商品,为您提供了一个完整的在线开店解决方案。千博购物系统.Net除了拥有一般网上商店系统所具有的所有功能,还拥有着其它网店系统没有的许多超强功能。千博购物系统.Net适合中小企业和个人快速构建个性化的网上商店。强劲、安全、稳定、易用、免费是它的主要特性。系统由C#及Access/MS SQL开发,是B/S(浏览器/服务器)结构Asp.Net程序。多种独创的技术使

下载

另一个易错点:把泛型类当普通基类用,比如写 MyList<t> obj = new MyList<string>();</string></t> —— 这里 T 未绑定,编译不过;左侧类型必须是已闭合的(closed)泛型,如 MyList<string></string>

泛型类和非泛型类共存时,命名冲突需靠命名空间或别名隔离

如果已有非泛型类 Logger,又新增泛型类 Logger<t></t>,二者在同一命名空间下不冲突,可共存。但调用时若只写 new Logger(),编译器默认匹配非泛型版本。

若想强制使用泛型版,必须写全 new Logger<string>()</string>。更麻烦的是,当两个类在不同程序集、又被 using 引入时,可能触发歧义错误:

The type 'Logger' is defined in an assembly that is not referenced.

此时要么加完整命名空间前缀,要么用 using 别名:

using StringLogger = MyLib.Logger<string>;

泛型类型的元数据在编译期生成具体版本(JIT 时再特化),所以 List<int></int>List<string></string> 在运行时是完全不同的类型,不能互相赋值,也不共享静态字段。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

910

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

251

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

967

2024.03.01

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

910

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

597

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

294

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

210

2025.08.29

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

747

2024.01.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

48

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 10.6万人学习

C 教程
C 教程

共75课时 | 5.1万人学习

C++教程
C++教程

共115课时 | 20.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号