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