深入理解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 Tcount;//定义泛型数组 长度为count

for (int i = 0; i < count; i++)//t1添加元素

{

t1i = 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) { }//有参数的构造

}

相关推荐
暴走约伯14 小时前
【VFX工具链源码拆解 09】终极工业化闭环:基于 ID 规则驱动的全自动场景建档、骨骼挂载与男转女场景迁移
unity·c#·游戏引擎·材质
用户788477316341 天前
WinForms 迁移 WPF:Upgrade Assistant 覆盖 30%,剩下 70% 我手写了六周
c#
寂寞的船2 天前
【Unity知识速递】第13期 Unity 内存泄漏排查实战:从 Memory Profiler 到 Lua 引用泄漏的生产级全链路诊断
unity·junit·c#·游戏引擎·lua
用户3721574261352 天前
C# 提取 PDF 附件:包括文档附件和页面注释附件
c#
寂寞的船2 天前
【Unity Bug挑战】第12期 Awaitable 二次 await 死锁之谜 —— 为什么同一个异步操作等两次就卡死?
unity·c#·游戏引擎·bug
huaqianzkh4 天前
WinForm C#:循环修改控件UI闪烁卡顿?SuspendLayout / ResumeLayout 与 BeginUpdate 优化
开发语言·ui·c#
用户3721574261354 天前
C# 实现 Excel 单元格保护:锁定公式并允许编辑指定区域
c#·ai编程·编程语言
公子小六5 天前
基于.NET的Windows窗体编程之WinForms数据持久化(1)
windows·microsoft·c#·.net·winforms
三雷科技5 天前
第6章第4节:自定义分词器
开发语言·c#
zhanghaha13145 天前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#