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


五、重载判定终极规则

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

  • 参数个数不同 → 重载

  • 参数类型不同 → 重载

  • 参数顺序不同 → 重载

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

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


六、静态多态特点

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

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

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


七、满分背诵口诀

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

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

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

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

相关推荐
CoderIsArt6 小时前
C#中UI 线程与 Dispatcher
开发语言·ui·c#
AI情绪识别开源8 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
「QT(C++)开发工程师」9 小时前
C++ auto 用法详解
开发语言·c++
OPEN-F9 小时前
C++STL教程:容器适配器与实用工具
开发语言·c++
yaoxin5211239 小时前
507. Java 反射 - 在 BeanFactory 中实现依赖注入
java·开发语言
OPEN-F10 小时前
C++模板教程:变参模板、折叠表达式与SFINAE
java·开发语言·c++
有点。10 小时前
C++二叉搜索树进阶
开发语言·c++
HugoStudio_SWAN10 小时前
【擦除重绘】C++ 控制台动画:弹跳 Logo DVD 屏保效果
开发语言·c++·学习·程序人生
kyle~11 小时前
C++_STL---迭代器失效
开发语言·c++