news 2026/5/1 11:42:42

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

作者头像

张小明

前端开发工程师

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/5/1 6:15:13

C#哈希表遍历技巧全解析以及栈 堆 队列的认识

hash表以及遍历方法//数组结构:长度是固定 类型是固定 int[] is1 { 1, 2, 3 };//动态集合&#xff1a;长度不固定&#xff0c;类型不固定&#xff0c;存储是object类型 ArrayList list new ArrayList();//泛型集合&#xff1a;长度不固定&#xff0c;类型固定 List<int>…

作者头像 李华
网站建设 2026/5/1 10:02:55

Xapian: 一款C++全文检索解决方案

目录 1.简介 2.安装与集成 2.1.vcpkg 一键安装&#xff08;推荐&#xff0c;自动解决依赖&#xff09; 2.2.源码编译&#xff08;适合定制化 / 无网络环境&#xff09; 2.3.工程集成&#xff1a;CMake 配置&#xff08;直接复用&#xff09; 3.核心功能实战 3.1.创建索引…

作者头像 李华
网站建设 2026/5/1 7:30:31

[架构之路-277]:架构活动不同阶段目标和决策的挑战不同,需要不同的思维模式:想法形成阶段需要全方位思维,又称系统思维;架构规划阶段需要批判性性思维;实时阶段需要实用性思维;复盘阶段需要分析性思维;

&#x1f9e0; 架构活动四阶段思维模式模型——根据目标与挑战动态切换认知方式核心理念&#xff1a; 架构不是一成不变的设计成果&#xff0c;而是一个随项目演进而不断调适的认知过程。 优秀的架构师不仅要掌握技术&#xff0c;更要能在不同阶段启用适配性的思维模式&#xf…

作者头像 李华
网站建设 2026/5/1 7:28:29

中小企业必备:低成本搭建智能客服系统的秘诀

中小企业如何用一台普通电脑搭建安全可控的智能客服系统&#xff1f; 在客户咨询量日益增长的今天&#xff0c;许多中小企业正面临一个两难困境&#xff1a;一边是不断攀升的人力成本&#xff0c;一边是用户对响应速度和专业度越来越高的期待。传统的客服模式依赖人工轮班、反…

作者头像 李华
网站建设 2026/5/1 7:31:45

Java核心面试题终极总结:从基础到进阶,覆盖高频考

Java作为后端开发的主流语言&#xff0c;其核心知识点始终是面试考察的重点。无论是校招还是社招&#xff0c;面试官都会围绕Java基础、面向对象、集合框架、异常处理、关键字特性等核心模块展开提问。本文整理了Java开发中高频出现的38道核心面试题&#xff0c;按知识模块进行…

作者头像 李华
网站建设 2026/5/1 7:28:59

张雪峰推崇 “干安全有前景”,为何众多网友并不认同?

在一次演讲中&#xff0c;张雪峰老师说&#xff1a;学网络安全/信息安全准没错 但实际情况是&#xff0c;很多网友并不买账。 一位大二的网安专业的同学&#xff0c;在社交媒体上发文咨询&#xff1a; 一开始报网安是因为看到说网络安全前景很好&#xff0c;but这一年随着我在…

作者头像 李华