C# 多态与函数重载(静态多态)

一、多态 核心概念

多态:同一个功能,拥有不同的实现形态

C# 多态分为两大类:

1. 静态多态(编译时多态)

程序编译阶段就确定调用哪个方法

包含:函数重载、运算符重载

2. 动态多态(运行时多态)

程序运行阶段动态确定调用哪个方法

依靠:继承 + 虚方法重写 / 接口 / 抽象类实现

静态多态 :在编译过程中,通过方法重载和运算符重载来实现,也称之为静态绑定和早期绑定

动态多态 :在运行过程中,通过方法重写,隐藏方法来实现,也称之为动态绑定或者后期绑定


二、函数重载(静态多态核心)

1. 函数重载满足的三个硬性条件(必考)

  1. 方法名必须完全一致

  2. 参数列表必须不同:参数个数不同 / 参数类型不同 / 参数顺序不同

  3. 仅返回值不同,不构成重载(超级高频坑点)

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) 是两个不同的参数列表,属于合法重载。


五、重载判定终极规则

两个方法是否是重载,只看参数列表

  • 参数个数不同 → 重载

  • 参数类型不同 → 重载

  • 参数顺序不同 → 重载

  • 仅返回值不同 → 不是重载

  • 仅参数名不同 → 不是重载


六、静态多态特点

  • 编译时就绑定方法,执行效率高

  • 方法名相同,参数列表不同,实现多种形态

  • 不需要继承、不需要重写,同类中即可实现


七、满分背诵口诀

  • 多态分两种,静态靠重载,动态靠重写

  • 重载三条件:同名、参不同、不看返回值

  • 参个数、类型、顺序,任一不同即重载

  • 只改返回不算数,编译报错记清楚

相关推荐
兰令水6 分钟前
hot100【acm版】【2026.7.21打卡-java版本】
java·开发语言·算法·leetcode·面试
2501_9142459316 分钟前
Java应用性能调优与生产监控部署:2026年实战手册
java·开发语言
时光不染。回忆不淡35 分钟前
Python基础语法教程
开发语言·python
爱喝水的鱼丶39 分钟前
SAP-ABAP:一次关于“交货日期”的增强需求:从复杂增强到标准功能的回归之旅
运维·开发语言·性能优化·sap·abap·经验交流
星恒随风1 小时前
C++ STL 详解:list 的使用、迭代器失效、模拟实现与 vector 对比
开发语言·数据结构·c++·笔记·学习·list
Tim_101 小时前
【C++】019、内存泄漏
java·开发语言
牢姐与蒯1 小时前
c++之异常
开发语言·c++·c++11
此生决int1 小时前
深入理解C++系列(02)——类和对象(上)
开发语言·c++
-银雾鸢尾-6 小时前
C#中的拓展方法
开发语言·c#
guodingdingh8 小时前
软件开发工作问题总结0718
java·开发语言·数据库