C# 泛型方法

一、泛型 核心概念

1. 什么是泛型

泛型 = 广泛的类型

定义方法时不固定参数类型、不固定返回值类型,用占位符(T、T1、T2)代替。

在调用方法时,才动态指定具体类型 → 延迟指定类型。

2. 解决的问题(重点)

不用泛型:不同类型需要写多个重载方法,代码冗余、重复度高。

使用泛型:一个方法适配所有类型,极大简化代码、复用性极强。


二、泛型方法语法

1. 基础语法格式

cs 复制代码
// T 为泛型占位符,可以自定义字母(T、T1、T2、V、W均可)
static 返回值 Test<T>(T 参数)
{
    return 参数;
}

规则:方法名后加 <泛型占位符>,方法内所有 T 类型保持一致


三、普通重载 VS 泛型方法(代码优化对比)

1. 传统写法:函数重载(冗余)

每种类型都要写一个方法,重复代码极多

cs 复制代码
static int Test(int a)
{
    return 10;
}
static string Test(string a)
{
    return "ss";
}

2. 泛型写法:一个方法搞定所有类型(最优解)

cs 复制代码
// T 代表任意类型,参数、返回值统一为T
static T Test<T>(T a)
{
    return a;
}

3. 调用方式两种

cs 复制代码
// 方式1:显式指定类型(完整写法)
Console.WriteLine(Test<int>(10));
Console.WriteLine(Test<string>("aa"));
Console.WriteLine(Test<bool>(true));

// 方式2:类型推断(简化写法,省略<>)
// 编译器自动根据传入参数,推断泛型类型
Console.WriteLine(Test(new string[] { "aa" }));

四、单泛型多参数(统一类型)

Test1<T>:两个参数、返回值全部为同一个类型T

cs 复制代码
// 两个参数必须是相同类型
static T Test1<T>(T a, T b)
{
    return b;
}

// 调用
Test1<int>(10, 20);
Test1(10, 20); // 类型推断简化

规则:同一个T,所有参数、返回值类型必须完全一致


五、多泛型参数(多个不同类型)

当方法需要传入两种不同类型 参数,使用多个泛型占位符 <T1,T2>

1. 无返回值双泛型方法

cs 复制代码
static void Test2<T1, T2>(T1 a, T2 b)
{

}

// 调用:类型可以任意组合
Test2<int, string>(10, "aa");
Test2(10, new string[] { "aa" });
Test2(10, 10);

2. 泛型返回值 + 泛型数组参数

cs 复制代码
// T1:返回值、第一个参数类型
// T2:数组参数类型
static T1 Test3<T1, T2>(T1 a, T2[] b)
{
    return a;
}

// 调用
Test3<int, int>(10, new int[] { 1, 2, 3 });
Test3(10, new string[] { "aa" });

六、泛型方法两大调用方式(必考)

1. 显式调用

手动写 方法<类型>(参数),精准指定类型

2. 隐式调用(类型推断)

省略 <>,编译器根据传入参数自动匹配泛型类型,代码更简洁


七、泛型方法核心规则总结

  • 泛型占位符 T/T1/T2 只是类型占位,无固定含义

  • 同一个占位符,类型必须统一

  • 多个占位符 T1,T2 支持传入不同类型参数

  • 泛型延迟绑定:定义不指定类型,调用才确定类型

  • 完美替代函数重载,减少大量重复代码


八、满分背诵口诀

  • 泛型占位T,定义不定类型

  • 调用传类型,延迟来绑定

  • 单T类型全统一,多T类型可不同

  • 可显可隐来调用,替代重载省代码

相关推荐
亦暖筑序几秒前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
李明卫杭州1 分钟前
CSS BFC 完全指南:从原理到实战,彻底搞懂这个"结界"
前端
Momo__2 分钟前
MDN MCP Server——Mozilla 把 Web 文档接进 AI Agent,从此 LLM 不再瞎编 API
前端·ai编程·mcp
妙码生花2 分钟前
现代前端的极致性能 icon 加载方案(死磕成功版)
前端·vue.js·typescript
掘金者阿豪1 小时前
把业务数据变成共享仪表盘:Metabase可视化与远程访问实践
前端·后端
kyriewen1 小时前
折腾了半年 AI 编程工作流,最后发现效率瓶颈是桌上那块屏幕
前端·javascript·ai编程
蜗牛前端2 小时前
codex 全流程开发上线的高颜值礼簿小程序
前端·微信小程序
大龄秃头程序员2 小时前
我在图文流 App 里落地双层缓存、弱网降级与 OOM 治理
前端
老王以为2 小时前
React Renderer 分离的多平台架构
前端·react native·react.js
hunterandroid2 小时前
Kotlin Coroutines 与 Flow:让异步任务更清晰
前端