news 2026/4/23 16:59:59

深入理解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/4/23 11:14:13

大模型选型神器:DeepSeek 辅助分析业务需求匹配最优 AI 工具

大模型选型神器&#xff1a;DeepSeek 辅助分析业务需求匹配最优 AI 工具第一章&#xff1a;AI 大模型选型困境与破局之道当前企业面临的人工智能选型挑战日益复杂。随着大模型技术的爆发式增长&#xff0c;市场上涌现出数百种基础模型和数千种行业解决方案&#xff0c;形成典型…

作者头像 李华
网站建设 2026/4/23 12:37:45

Day35~初始买入的 n 瓶饮料,最后他一共能喝到多少瓶饮料

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊 C 型饮料&#xff0c;凭 3 个瓶盖可以再换一瓶 C 型饮料&#xff0c;并且可以一直循环下去(但不允许暂借或赊账)。请你计算一下&#xff0c;如果小明不浪费瓶盖&#xff0c;尽量地参加活动&#xff0c;那么&#xff0c;对于他初始…

作者头像 李华
网站建设 2026/4/23 12:55:44

Springboot家庭装修套餐消费管理c2emy(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能&#xff1a;接待员,导购员,店长,客户,设计师,装修材料,装修套装,装修订单,项目排尺,装修设计,项目安排,客户安排,装修进度,装修评价开题报告内容一、研究背景与意义1.1 研究背景随着城市化进程的加速和居民生活水平的提高&#xff0c;家庭装修已成为现…

作者头像 李华
网站建设 2026/4/23 14:32:41

系统网络编程

一、OSI模型1.OSI七层工作模型&#xff1a;应用层&#xff1a;为网络用户提供各种服务&#xff0c;如电子邮件、文件传输等。表示层&#xff1a;为不同主机的通信提供统一的数据表示形式。会话层&#xff1a;负责信息传输的组织和协调&#xff0c;管理进程会话过程。传输层&…

作者头像 李华
网站建设 2026/4/19 9:24:48

给自己做一个 ChatGPT:基于 Gradio 的本地 LLM 网页对话界面

给自己做一个 ChatGPT&#xff1a;基于 Gradio 的本地 LLM 网页对话界面摘要&#xff1a;黑底白字的命令行虽然极客&#xff0c;但不够直观。今天我们将使用 Python 领域最流行的机器学习界面库 Gradio&#xff0c;为我们在 RTX 3090 上微调的 Qwen/Llama 模型穿上一件漂亮的“…

作者头像 李华