news 2026/7/15 2:26:02

认识泛型 了解泛型 深入泛型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
认识泛型 了解泛型 深入泛型

泛型方法 泛型类 泛型接口

//1泛型方法:只需要在方法名字后面加<T,T1,T2> 为了确定参数类型和返回值类型,当然也可以参数和返回值类型定义成普通类型

//2 泛型类:在类名后面添加<T>,目的把类型传入类当中

//3 泛型接口:在接口后面添加泛型,目的把类型传接口当中

实例:

internal class Program { static void Main(string[] args) { People<int,float> p1 = new People<int,float>(); //传入的int 和float类型 p1.F1<float>(10.1f, 10, 20.2f); People<string,string> p2 = new People<string,string>(); p2.F1<string>("昨天黑客攻击", "对国内政府挑衅", "红客联盟白宫服务网站挂上中国国旗"); Student s1 = new Student(); s1.Age = 10; s1.Name = 19.1f; s1.F1<int>(10, 20); Console.ReadKey(); } } //泛型字母可以写任意的字母 class People<TTest1,TTest2> { public string Name { get; set; } public TTest1 A1 { get; set; }// 属性的类型和传入TTest1类型保持一致 public TTest2 A2 { get; set; } // 属性的类型和传入TTest2类型保持一致 public void F1<T>(T c ,TTest1 a,TTest2 b) { dynamic sum = (dynamic)c + (dynamic)a + (dynamic)b; Console.WriteLine(sum); } } //泛型接口 interface IPeople<T> { int Age { get; set; } T Name { get; set; } void F1<T1>(T a,T1 b); } class Student : IPeople<float> { public int Age { get; set; } public float Name { get; set; } public void F1<T1>(float a, T1 b) { Console.WriteLine(a + b.ToString()); } }

泛型约束

//4 泛型约束: 泛型本身没有限制类型但是通过 where对泛型进行限制范围

实例

internal class Program { static void Main(string[] args) { //调用Test1方法 Test1<int>(10); Test1("hello"); Test1(DateTime.Now); //调用Test2方法 Test2(10, 10); //Test2<DateTime,int>(DateTime.Now, 10);报错 //Test2("11", 10);报错 //调用Test3方法 Test3("11", "11"); // Test4方法 Test4(new People(),new People()); // Test5方法 Test5(new Student(), new SmallStudent()); //Test6方法 Test6(new People(), new People()); Test6(new SmallStudent(), new Student()); // Test6( new Student(), new SmallStudent()); 报错 Console.ReadKey(); } //本身泛型没有类型限制的 static void Test1<T>(T a) { } // where T : struct 限制T只能值类型 static void Test2<T>(T a,T b) where T : struct { } //where T : class 限制T只能是引用类型 static void Test3<T>(T a, T b) where T : class { } //where T : new() T必须有一个不带参数的构造函数的类 static void Test4<T>(T a, T b) where T : new() { } //where T : IPeople T必须是实现接口的类型 或者实现接口类的派生类, 本例可以是Student、还可以继承于Student的子类:SmallStudent static void Test5<T>(T a, T b) where T : IPeople { } // where T : U 限制传入类型 要么是T和U同一个类型、要么T是U的子类 static void Test6<T,U>(T a, U b) where T : U { } } interface IPeople { } //接口 class Student:IPeople { } // Student实现接口 class SmallStudent:Student { } // SmallStudent继承了 Student //定义people类 class People { public People() { } // 无参数构造 public People(int a) { }// 有参数的构造 }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 17:32:03

基于Python+大数据+SSM基于深度学习的淘宝用户购物可视化与行为预测系统(源码+LW+调试文档+讲解等)/淘宝用户分析系统/购物行为预测系统/用户购物可视化系统/电商用户行为预测

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

作者头像 李华
网站建设 2026/7/14 17:03:37

如何用anything-llm实现文档智能检索与对话交互?

如何用 Anything-LLM 实现文档智能检索与对话交互&#xff1f; 在企业知识库动辄上千份PDF、Word和Excel文件的今天&#xff0c;如何快速找到“那份说过但记不清在哪”的关键信息&#xff1f;传统搜索依赖关键词匹配&#xff0c;面对模糊提问常常束手无策&#xff1b;而通用大模…

作者头像 李华
网站建设 2026/7/10 7:24:31

System76发布Pop!_OS 24.04 LTS版搭载全新Rust构建的桌面环境

经过长时间的开发&#xff0c;第一个完全基于Rust构建的桌面环境1.0版本终于发布&#xff0c;整体表现令人印象深刻。上周末&#xff0c;System76正式发布了其内部开发的Ubuntu衍生版本的长期支持版本&#xff0c;同时推出了完全用Rust重新实现的内部桌面环境COSMIC的"Epo…

作者头像 李华
网站建设 2026/7/14 15:14:44

Pr字幕样式如何统一修改?简单3步,新手也能一次改完

如果你搜索到这篇文章&#xff0c;大概率只有一个想法&#xff1a; 字幕太多了&#xff0c;不想一条一条改。 不管是改字体、颜色&#xff0c;还是统一位置&#xff0c;只要字幕数量一多&#xff0c;用 Pr 原生方式操作&#xff0c;都会变得又慢又容易出错。 下面这套方法&…

作者头像 李华
网站建设 2026/7/13 15:03:10

低功耗设计:手机控制LED屏的节能策略

手机控制LED屏如何省电&#xff1f;揭秘三大低功耗核心技术你有没有想过&#xff0c;一块小小的LED显示屏&#xff0c;为什么能让智能手环撑上一周&#xff0c;而有些电子标签却几个月都不换电池&#xff1f;在物联网设备遍地开花的今天&#xff0c;手机通过蓝牙控制LED屏已经不…

作者头像 李华
网站建设 2026/7/7 6:46:01

MyBatis实战精讲:完整用户CRUD操作全解析

在Java持久层开发领域&#xff0c;MyBatis凭借其轻量化、高灵活性的特性&#xff0c;成为连接Java应用与数据库的主流框架。它摒弃了JDBC繁琐的代码编写&#xff0c;通过“接口XML”的映射模式&#xff0c;让开发者专注于SQL逻辑本身。本文将基于一套完整的用户数据操作代码&am…

作者头像 李华