掌握 C# 方法重载:核心概念、实战示例与最佳实践
C# 方法重载完全指南
全面掌握 C# 方法重载技巧:通过改变参数个数、类型、顺序实现同名方法多态,附带清晰代码示例与避坑指南。
在 C# 中,一个类可以包含多个同名但参数列表不同的方法,这被称为方法重载。例如:
void Display() { ... }
void Display(int a) { ... }
float Display(double a) { ... }
float Display(int a, float b) { ... }
上述 Display 方法被重载了四次。它们共享同一个方法名,但接受不同的参数组合。
1. 通过改变参数个数重载
最常见的重载方式:同名方法接受不同数量的参数。
void Display(int a) { ... }
void Display(int a, int b) { ... }
示例
using System;
namespace MethodOverload {
class Program {
// 单参数版本
void Display(int a) {
Console.WriteLine("参数: " + a);
}
// 双参数版本
void Display(int a, int b) {
Console.WriteLine("参数: " + a + " 和 " + b);
}
static void Main(string[] args) {
Program p1 = new Program();
p1.Display(100); // 调用单参数版本
p1.Display(100, 200); // 调用双参数版本
Console.ReadLine();
}
}
}
输出
参数: 100 参数: 100 和 200
p1.Display(100)调用单参数重载p1.Display(100, 200)调用双参数重载
2. 通过改变参数数据类型重载
参数个数相同时,只要参数类型不同,即可构成重载。
void Display(int a) { ... }
void Display(string b) { ... }
示例
using System;
namespace MethodOverload {
class Program {
// int 参数版本
void Display(int a) {
Console.WriteLine("int 类型: " + a);
}
// string 参数版本
void Display(string b) {
Console.WriteLine("string 类型: " + b);
}
static void Main(string[] args) {
Program p1 = new Program();
p1.Display(100); // 调用 int 版本
p1.Display("Programiz"); // 调用 string 版本
Console.ReadLine();
}
}
}
输出
int 类型: 100 string 类型: Programiz
p1.Display(100)调用int重载p1.Display("Programiz")调用string重载
3. 通过改变参数顺序重载
当参数个数、类型均相同但顺序不同时,也构成重载。
void Display(int a, string b) { ... }
void Display(string b, int a) { ... }
示例
using System;
namespace MethodOverload {
class Program {
// int 优先,string 其次
void Display(int a, string b) {
Console.WriteLine("int: " + a);
Console.WriteLine("string: " + b);
}
// string 优先,int 其次
void Display(string b, int a) {
Console.WriteLine("string: " + b);
Console.WriteLine("int: " + a);
}
static void Main(string[] args) {
Program p1 = new Program();
p1.Display(100, "Programming"); // 调用 int, string 版本
p1.Display("Programiz", 400); // 调用 string, int 版本
Console.ReadLine();
}
}
}
输出
int: 100 string: Programming string: Programiz int: 400
p1.Display(100, "Programming")调用int, string重载p1.Display("Programiz", 400)调用string, int重载
最佳实践与避坑指南
- 语义一致性:重载方法应完成语义相近的操作,避免让调用者困惑。
- 避免歧义:当存在隐式转换时(如
int到double),编译器可能无法确定调用哪个重载,需显式转型或重新设计。 - 优先使用可选参数:C# 4.0+ 支持可选参数与命名参数,许多原本需要重载的场景可用单一方法+默认值替代,减少代码膨胀。
- 文档注释:为每个重载编写清晰的 XML 文档注释,说明其适用场景与参数含义。
C语言