当前位置: 首页 > news >正文

c#泛型(generic)

概述:

C#中的泛型(Generics)是一种允许在编写类、方法和委托时使用参数化类型的机制。泛型允许我们编写更通用、可重用的代码,可以避免类型转换和重复编写类似的代码。

泛型的基本语法如下所示:

class ClassName<T>
{// 泛型类的定义
}void MethodName<T>(T parameter)
{// 泛型方法的定义
}

在泛型类或泛型方法中,T是类型参数,可以用于定义类的字段、方法的参数和返回类型。

以下是使用泛型的几个常见示例:

泛型类:

class GenericClass<T>
{private T value;public GenericClass(T value){this.value = value;}public T GetValue(){return value;}
}GenericClass<int> intObject = new GenericClass<int>(5);
int intValue = intObject.GetValue();GenericClass<string> stringObject = new GenericClass<string>("Hello");
string stringValue = stringObject.GetValue();

泛型方法:

T Max<T>(T a, T b)
{return a.CompareTo(b) > 0 ? a : b;
}int maxInt = Max<int>(5, 3);
string maxString = Max<string>("apple", "banana");

泛型传递:

//子类也不确定具体类型,把类型传递给后面需要用到泛型特化的地方

        public class person<T>{public T Name { get; set; }}//泛型方法中也可以定义多个泛型public class teacher<T, U> : person<T>{public U date { get; set; }public override string? ToString(){string str = "";str += $"name:{Name}\n";str += $"date:{date}";return str.ToString();}}private static void Main(string[] args){teacher<string, int> t1 = new teacher<string, int>();t1.Name = "xiaoming";t1.date = 2023;Console.WriteLine(t1.ToString());}

泛型约束(Constraints)允许我们对泛型类型参数进行限制,可以指定类型参数必须满足的条件。例如,可以使用where关键字限制类型参数必须是某个基类、接口或具有无参数构造函数等。

泛型约束示例:

class GenericClass<T> where T : IComparable
{// T必须实现IComparable接口
}T Max<T>(T a, T b) where T : IComparable
{// T必须实现IComparable接口
}class MyClass<T> where T : new()
{// T必须具有无参数构造函数
}

除了类和方法,C#还支持泛型接口和泛型委托。泛型接口和泛型委托的使用方式与泛型类和泛型方法类似。

泛型的优点包括代码重用、类型安全、性能优化和更好的可读性。通过使用泛型,我们可以编写更加灵活、通用的代码,提高了代码的可维护性和可扩展性。

http://www.lryc.cn/news/148430.html

相关文章:

  • 【力扣每日一题】2023.8.30 到家的最少跳跃次数
  • 精读《算法题 - 地下城游戏》
  • 随记-Kibana Dev Tools,ES 增删改查 索引,Document
  • 什么是架构,架构的本质是什么
  • Python爬虫(十七)_糗事百科案例
  • Ae 效果:CC Threads
  • Kotlin 协程 - 多路复用 select()
  • 学习笔记-ThreadLocal
  • python利用pandas统计分析—groupby()函数的使用
  • OPENCV实现ORB特征检测
  • W5100S-EVB-PICO主动PING主机IP检测连通性(十)
  • 使用 Nginx 搭建文件下载服务器
  • 链式栈StackT
  • Fiddler中 AutoResponder 使用
  • 77GHz线性调频连续波雷达
  • YOLOV8改进:更换为MPDIOU,实现有效涨点
  • BookStack开源免费知识库docker-compose部署
  • Linux:编译遇到 Please port gnulib freadahead.c to your platform ,怎么破
  • three.js(三):three.js的渲染结构
  • 客户端读写HBase数据库的运行原理
  • 不使用VH6501设备,通过VN1630等普通设备使用canConfigureBusOff函数进行busoff干扰测试
  • 服务器数据恢复-服务器RAID6硬盘故障离线的数据恢复案例
  • DB2 HADR+TSA运维,TSA添加资源组的命令
  • LeetCode-135-分发糖果
  • Viva Workplace Analytics Employee Feedback SU Viva Glint部署方案
  • ASIC-WORLD Verilog(14)系统任务
  • 两台电脑共享文件设置
  • 《C和指针》笔记17:sizeof
  • 说说大表关联小表
  • Unity 之 方括号[ ] 的用法以及作用