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类型可不同

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

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
神仙别闹3 天前
基于C#+MySQL实现(WinForm)个人聊天室软件
c#
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端