news 2026/9/3 3:00:40

深入理解C#泛型:从方法到约束

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入理解C#泛型:从方法到约束

《泛型》

泛型:广泛的类型,一般给方法传入类型的作用,关键字<T>
//定义方法的时候可以把参数或者方法的返回值写成泛型,调用的时候传递实参决定方法的返回值类型或者参数类型

//通俗:假设想方法的参数类型不一样,可以传递整数也可以传递其他类型,可以把参数类型定义成泛型

//语法:修饰符 静态/非静态 方法返回值 方法名<T>(T a,T b){}
//凡是所有T地方类型是一致的
static void Test1<T>(T a)
{
}

/传递两个参数 根据传入的参数类型 返回一个泛型数组,
static T[] Test3<T>(T a,int count)//啊传递的元素,count是数组的个数
{
T[]t1=new T[count];//定义泛型数组 长度为count
for (int i = 0; i < count; i++)//t1添加元素
{
t1[i] = a;//把a添加t1数组里面 添加count次
}
return t1;
}

//定义泛型方法
int[]is1= Test3<int>(10,20);
Array.ForEach(is1, i => { Console.WriteLine(i + "--------"); });

string[]is2= Test3<string>("hello", 20);
Array.ForEach(is2, i => { Console.WriteLine(i + "--------"); });
《泛型类》

//1泛型方法:只需要在方法名字后面加<T,T1,T2>,为了参数类型和返回值类型,当然也可以把参数和返回值类型定义成普通类型
//2泛型类:在类名后面添加<T>,目的把类型传入类当中
//3泛型接口:在接口后面添加泛型,目的把类型传接口当中

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

//泛型字母可以写任意字母

《泛型约束》

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()必须有一个不带参数的构造函数的类
static void Test4<T>(T a, T b)where T : new() { }
//where T : IPeople必须是实现接口的类型,或者实现接口类的派生类,本例可以是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 SmallStuden :Student { }//SmallStudent继承了Student
class People
{
public People() { }
public People(int a) { }//有参数的构造
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 21:51:46

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

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

作者头像 李华
网站建设 2026/9/2 21:53:32

本地搭云盘还能远程用?Cloudreve + cpolar内网穿透的简单方案

文章目录 前言1. 安装Docker2. 使用Docker拉取镜像3. 创建并启动Cloudreve容器4. 本地访问测试5. 公网远程访问本地Cloudreve5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 前言 Cloudreve 是一款个人和团队都能用的云盘系统&#xff0c;支持文件…

作者头像 李华
网站建设 2026/9/2 15:04:43

职场笔杆子必看!2025公文写作软件TOP3对比

作为一名体制内笔杆子&#xff0c;写作公文的痛谁懂&#xff0c;临时的派稿任务&#xff0c;格式要求超严格&#xff0c;内容要求严谨合规&#xff0c;加班改稿也都是经常的事。 随着AI的不断发展&#xff0c;人工智能的写作能力越来越强&#xff0c;为写作带来显著的提效&…

作者头像 李华
网站建设 2026/9/2 10:04:38

Jenkins 2.528.3 与 GitLab 深度集成:实现自动构建

在 Jenkins 2.528.3 版本中&#xff0c;实现 GitLab 代码推送&#xff08;Push&#xff09;后自动触发构建&#xff0c;主要依赖于 GitLab Plugin 或 Generic Webhook Trigger Plugin。以下是两种主流方法的详细配置指南&#xff0c;帮助构建高效的自动化流水线。核心配置概览自…

作者头像 李华
网站建设 2026/9/3 0:23:48

算法基础-多源最短路

多源最短路 多源最短路&#xff1a;即图中每对顶点间的最短路径。floyd 算法本质是动态规划&#xff0c;⽤来求任意两个结点之间的最短路&#xff0c;也称插点法。通过不断在两点之间加 ⼊新的点&#xff0c;来更新最短路。 适⽤于任何图&#xff0c;不管有向⽆向&#xff0c;…

作者头像 李华