C#基础之自定义泛型
一、自定义泛型
(1)泛型类
//泛型类 public class MyClass<T> { public void SayHi(T arg) { Console.WriteLine(arg); } }
(2)泛型方法
public class MyClass1 { //泛型方法 public void SayHi<T>(T msg) { Console.WriteLine(msg); } }
(3)泛型接口
泛型接口
public interface IFace<T> { T SayHi(T msg); void SayHello(T msg); }
1).普通类来实现泛型接口
public class MyClass3 : IFace<string> { public void SayHello(string msg) { Console.WriteLine(msg); } public string SayHi(string msg) { return msg; } }
2).泛型类实现泛型接口
public class MyClass4<T> : IFace<T> { public void SayHello(T msg) { Console.WriteLine(msg); } public T SayHi(T msg) { return msg; } }
在调用的时候,需要传递数据类型才能new一个实例
二、自定义泛型的约束where
public class MyClass5<T,K,V,W,X,Y,Z> where T:struct //约束T必须是值类型 where K:class //约束K必须是引用类型 where V:IComparable //约束V必须实现IComparable,int就符合,原因是int类型实现了IComparable接口 where W:K //要求W必须是K类型或者K类型的子类 where X:class,new() //多个约束,其中new()表示无参数的构造函数,表示约束是引用类型并且有无参数的构造函数 { }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构