泛型简介
泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。
您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。
泛型特性
使用泛型是一种增强程序功能的技术,具体表现在以下几个方面:
- 它有助于您最大限度地重用代码、保护类型的安全以及提高性能。
- 您可以创建泛型集合类。.NET 框架类库在 System.Collections.Generic 命名空间中包含了一些新的泛型集合类。您可以使用这些泛型集合类来替代 System.Collections 中的集合类。
- 您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
- 您可以对泛型类进行约束以访问特定数据类型的方法。
- 关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取。
泛型类
namespace GenericStudy { /// <summary> /// 泛型类 /// </summary> public class GenericClass<T> { public T[] Param { get; set; } public GenericClass(int size) { Param = new T[size]; } public T GetParam(int index) { return Param[index]; } public void SetParam(int index, T val) { Param[index] = val; } } }
泛型方法
using System; using System.Collections.Generic; using System.Text; namespace GenericStudy { /// <summary> /// 泛型方法 /// </summary> public class GenericMethod { public static void ConsoleType<T>() { Type t = typeof(T); Console.WriteLine(t.FullName); } } }
泛型类与泛型方法的调用
using System; namespace GenericStudy { /// <summary> /// 泛型学习 /// </summary> class Program { static void Main(string[] args) { //泛型类 GenericClass<int> genericClass = new GenericClass<int>(3); for (int i = 0; i < 3; i++) { genericClass.SetParam(i, i + 10); } for (int i = 0; i < 3; i++) { Console.WriteLine(genericClass.GetParam(i)); } GenericClass<string> genericClass1 = new GenericClass<string>(5); for (int i = 0; i < 5; i++) { genericClass1.SetParam(i, i.ToString()); } for (int i = 0; i < 5; i++) { Console.WriteLine(genericClass1.GetParam(i)); } //泛型方法 GenericMethod.ConsoleType<string>(); GenericMethod.ConsoleType<int>(); } } }
泛型的参数类型约束
where T : struct | T必须是一个结构类型
where T : class | T必须是一个Class类型
where T : new() | T必须要有一个无参构造函数
where T : NameOfBaseClass | T必须继承名为NameOfBaseClass的类
where T : NameOfInterface | T必须实现名为NameOfInterface的接口
例如:指定T必须是Class类型
using System; using System.Collections.Generic; using System.Text; namespace GenericStudy { /// <summary> /// 泛型方法 /// </summary> public class GenericMethod { public static void ConsoleType<T>() where T : class { Type t = typeof(T); Console.WriteLine(t.FullName); } } }
来自:https://www.cnblogs.com/gygtech/p/14772738.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统