Menu
CoddyTech

方法重载

本课属于 Coddy C# 学习旅程的“面向对象编程”单元。第 50 课,共 70 课。

方法重载允许你定义多个名称相同但参数列表不同的方法。编译器会根据你提供的参数确定要调用哪个版本。

每个重载方法都必须有唯一的签名,也就是说,参数数量不同或参数类型不同:

public static void Print(string message)
{
    Console.WriteLine(message);
}

public static void Print(string message, int times)
{
    for (int i = 0; i < times; i++)
        Console.WriteLine(message);
}

public static void Print(int number)
{
    Console.WriteLine(number);
}
// 编译器会选择合适的版本
Print("Hello");           // 调用 Print(string)
Print("Hi", 3);           // 调用 Print(string, int)
Print(42);                // 调用 Print(int)

重载和可选参数有一个重要区别。使用可选参数时,你只有一个方法来处理多种情况。使用重载时,你有多个独立的方法,可以针对每种情况包含完全不同的逻辑。

请注意,仅返回类型不同并不能让方法变得唯一,你不能有两个仅返回值不同的方法。参数列表必须不同。方法重载是一种编译时多态,也就是说,在编译代码时就会决定调用哪个方法,而不是在运行时决定。

challenge icon

挑战

简单

让我们构建一个多功能计算器类,展示方法重载的强大之处。你将创建多个版本的计算方法,以处理不同的情况,从简单的双数运算到更复杂的计算,并且这些方法都使用直观易懂的名称。

你要将代码分别写在两个文件中:

  • Calculator.cs:在 MathTools 命名空间中创建一个 Calculator 类,其中包含名称相同但参数不同的重载方法:
    • Multiply:创建三个重载版本:
      • 一个接收两个 int 参数,并以 int 返回它们的乘积的方法
      • 一个接收三个 int 参数,并以 int 返回它们的乘积的方法
      • 一个接收两个 double 参数,并以 double 返回它们的乘积的方法
    • Describe:创建两个重载版本:
      • 一个接收 int,并返回 "Integer: {value}" 的方法
      • 一个接收 double,并返回 "Double: {value}" 的方法
  • Program.cs:在主文件中创建一个 Calculator 实例,并演示编译器如何根据你提供的参数自动选择正确的重载方法。

你会收到 4 个输入:

  • 第一个整数(例如,5)
  • 第二个整数(例如,4)
  • 第三个整数(例如,3)
  • 一个小数(例如,2.5)

使用计算器执行以下运算,并将每个结果单独打印在一行:

  1. 将前两个整数相乘(使用接收两个 int 的版本)
  2. 将三个整数相乘(使用接收三个 int 的版本)
  3. 将第一个整数和小数相乘(使用接收两个 double 的版本)
  4. 描述第一个整数(使用接收 int 的版本)
  5. 描述小数(使用接收 double 的版本)

例如,如果输入是 5、4、3 和 2.5,输出应为:

20
60
12.5
Integer: 5
Double: 2.5

注意,你使用不同的参数类型和数量调用 Multiply 和 Describe,但编译器每次都能准确判断该使用哪个版本。这就是编译时多态:选择发生在代码编译时,而不是运行时!

亲手试试

using System;
using MathTools;

class Program
{
    public static void Main(string[] args)
    {
        // 读取输入
        int firstInt = Convert.ToInt32(Console.ReadLine());
        int secondInt = Convert.ToInt32(Console.ReadLine());
        int thirdInt = Convert.ToInt32(Console.ReadLine());
        double decimalNum = Convert.ToDouble(Console.ReadLine());

        // TODO: 创建一个 Calculator 实例

        // TODO: 用两个整数调用 Multiply,并打印结果

        // TODO: 用三个整数调用 Multiply,并打印结果

        // TODO: 用第一个整数和小数调用 Multiply,并打印结果

        // TODO: 用第一个整数调用 Describe,并打印结果

        // TODO: 用小数调用 Describe,并打印结果
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: C# 在线编译器