一、多态 核心概念
多态:同一个功能,拥有不同的实现形态
C# 多态分为两大类:
1. 静态多态(编译时多态)
程序编译阶段就确定调用哪个方法
包含:函数重载、运算符重载
2. 动态多态(运行时多态)
程序运行阶段动态确定调用哪个方法
依靠:继承 + 虚方法重写 / 接口 / 抽象类实现
静态多态 :在编译过程中,通过方法重载和运算符重载来实现,也称之为静态绑定和早期绑定
动态多态 :在运行过程中,通过方法重写,隐藏方法来实现,也称之为动态绑定或者后期绑定
二、函数重载(静态多态核心)
1. 函数重载满足的三个硬性条件(必考)
-
方法名必须完全一致
-
参数列表必须不同:参数个数不同 / 参数类型不同 / 参数顺序不同
-
仅返回值不同,不构成重载(超级高频坑点)
2. 核心原理
编译器根据 方法名 + 参数列表 区分不同方法,实现"同名不同功能"的多态效果。
三、代码逐行解析(合法重载案例)
cs
// 1. 无参方法
public static void F1()
{
Console.WriteLine("F1不带参数");
}
// 2. 参数个数不同 = 构成重载
public static void F1(int a)
{
Console.WriteLine("F1带一个参数");
}
// 3. 参数类型不同 = 构成重载
public static void F1(string a)
{
Console.WriteLine("F1带一个参数");
}
// 4. 参数个数不同 = 构成重载
public static void F1(string a, int b)
{
Console.WriteLine("F1带俩个参数");
}
// 5. 参数顺序不同 = 构成重载
public static void F1(int b, string a)
{
Console.WriteLine("F1带俩个参数");
}
// 6. 参数类型不同,返回值不同 = 依然构成重载(看参数不看返回值)
public static int F1(bool b)
{
Console.WriteLine("F1带1个参数");
return 10;
}
所有以上方法 全部是合法重载
区分依据:参数个数、类型、顺序存在差异,满足重载条件。
四、超级易错考点(笔试必考坑)
❌ 非法重载:仅返回值不同
以下代码 报错,不构成重载
cs
public static void F1(int a)
{
}
// 错误!仅仅返回值不一样,参数列表完全一致,不是重载
public static int F1(int a)
{
return 10;
}
重点结论 :返回值、修饰符、参数名 都不参与重载判定!
✅ 合法重载:参数顺序不同
F1(int,string) 和 F1(string,int) 是两个不同的参数列表,属于合法重载。
五、重载判定终极规则
两个方法是否是重载,只看参数列表:
-
参数个数不同 → 重载
-
参数类型不同 → 重载
-
参数顺序不同 → 重载
-
仅返回值不同 → 不是重载
-
仅参数名不同 → 不是重载
六、静态多态特点
-
编译时就绑定方法,执行效率高
-
方法名相同,参数列表不同,实现多种形态
-
不需要继承、不需要重写,同类中即可实现
七、满分背诵口诀
-
多态分两种,静态靠重载,动态靠重写
-
重载三条件:同名、参不同、不看返回值
-
参个数、类型、顺序,任一不同即重载
-
只改返回不算数,编译报错记清楚