C# 泛型和泛型约束
2020-11-01 11:31 默默的码农哥 阅读(557) 评论(0) 编辑 收藏 举报C#中的泛型,大致有如下几种:泛型方法,泛型类,泛型接口,泛型委托,泛型约束等
使用泛型的好处一个是为了减少代码量,更主要的是能提高效率,不需要进行拆箱和装箱的操作。
下面是写的简单的例子,共勉,加深理解和熟悉。
/// <summary>
/// 泛型类
/// </summary>
/// <typeparam name="T"></typeparam>
public class Calculate<T>
{
/// <summary>
/// 泛型委托
/// </summary>
/// <param name="a"></param>
private delegate void RemoveS(T a);
/// 泛型类
/// </summary>
/// <typeparam name="T"></typeparam>
public class Calculate<T>
{
/// <summary>
/// 泛型委托
/// </summary>
/// <param name="a"></param>
private delegate void RemoveS(T a);
RemoveS rs = null;
public Calculate()
{
rs= new RemoveS(Remove);
List = new List<T>();
}
public Calculate()
{
rs= new RemoveS(Remove);
List = new List<T>();
}
public List<T> List { get; set; }
/// <summary>
/// 泛型方法
/// </summary>
/// <param name="a"></param>
public void Add(T a)
{
List.Add(a);
Console.WriteLine("List :" + string.Join("&", List));
}
public void Remove(T a)
{
if (List.Contains(a))
{
List.Remove(a);
}
Console.WriteLine("List :" + string.Join("&", List));
}
}
/// <summary>
/// 泛型方法
/// </summary>
/// <param name="a"></param>
public void Add(T a)
{
List.Add(a);
Console.WriteLine("List :" + string.Join("&", List));
}
public void Remove(T a)
{
if (List.Contains(a))
{
List.Remove(a);
}
Console.WriteLine("List :" + string.Join("&", List));
}
}
调用的例子
static void Main(string[] arg)
{
Calculate<int> cal = new Calculate<int>();
cal.Add(2);
cal.Add(2);
cal.Remove(2);
Console.ReadLine();
{
Calculate<int> cal = new Calculate<int>();
cal.Add(2);
cal.Add(2);
cal.Remove(2);
Console.ReadLine();
Calculate<Animal> cal_animal = new Calculate<Animal>();
Animal a = new Animal { Name = "Dog" };
cal_animal.Add(a);
cal_animal.Remove(a);
Animal a = new Animal { Name = "Dog" };
cal_animal.Add(a);
cal_animal.Remove(a);
}
泛型接口

泛型接口实现
调用实现
2、泛型约束
值类型约束
Where T is Struct,就是在使用的时候只能使用值类型泛型,如INT,Struct,Double等
引用类型约束
Where T is Object,
实例化需要带参构造函数约束
Where T is New(Param param);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架