1. 方法重载(Method Overloading)
- 定义:在同一个类中,多个方法可以有相同的名称,只要它们的参数列表不同。参数列表的不同包括参数的个数、参数的类型或者参数的顺序不同。
- 使用场景:
- 当对同一操作有不同的输入类型或数量的需求时,方法重载提供了一种方便的方式来提供统一的方法名。例如,一个数学计算类可能有多个
Add
方法,用于处理不同数量和类型的数字相加。
- 示例:
- 考虑一个
Calculator
类,有以下重载的Add
方法:
class Calculator
{
public int Add(int num1, int num2)
{
return num1 + num2;
}
public int Add(int num1, int num2, int num3)
{
return num1 + num2 + num3;
}
public double Add(int num1, double num2)
{
return num1 + num2;
}
}
Calculator calculator = new Calculator();
int result1 = calculator.Add(2, 3);
int result2 = calculator.Add(1, 2, 3);
double result3 = calculator.Add(2, 3.5);
- 注意事项:
- 方法重载不能仅通过返回类型来区分。例如,有两个方法名字相同,参数列表相同,只是返回类型不同,这在C#中是不允许的。
2. 可选参数(Optional Parameters)
- 定义:在方法声明中,可以为参数指定默认值,这样在调用方法时,如果没有为该参数提供值,就会使用默认值。
- 使用场景:
- 当一个方法有一些参数,在大多数情况下有一个常用的值时,可选参数可以简化方法的调用。例如,一个数据库查询方法可能有一个可选的参数用于指定查询的最大记录数,默认值可以是查询全部记录。
- 示例:
class DatabaseQuery
{
public List<string> QueryData(int startIndex = 0, int maxRecords = -1)
{
List<string> data = new List<string>();
return data;
}
}
DatabaseQuery query = new DatabaseQuery();
List<string> result1 = query.QueryData(10, 20);
- 或者只提供部分参数的值,未提供值的参数将使用默认值:
List<string> result2 = query.QueryData();
- 注意事项:
- 可选参数必须出现在参数列表的末尾。也就是说,所有没有默认值的参数必须在有默认值的参数之前。
3. 具名参数(Named Parameters)
- 定义:在调用方法时,可以通过参数的名称来指定参数的值,而不是按照参数的顺序。
- 使用场景:
- 当方法有多个参数,并且有些参数的默认值已经满足需求,但需要改变特定参数的值时,具名参数非常有用。这可以提高代码的可读性,尤其是当方法的参数较多且类型相似时。
- 示例:
class Configuration
{
public void SetSettings(int width = 800, int height = 600, bool fullScreen = false)
{
}
}
Configuration config = new Configuration();
config.SetSettings(1024, 768, true);
config.SetSettings(height: 720, fullScreen: false);
- 注意事项:
- 具名参数可以和位置参数混合使用,但位置参数必须在具名参数之前,并且位置参数要按照正确的顺序提供。
4. 参数数组(Parameter Arrays)
- 定义:使用
params
关键字来声明参数数组。它允许向方法传递可变数量的参数,这些参数在方法内部会被当作同类型的数组来处理。 - 使用场景:
- 当需要一个方法能够接受不确定数量的参数,例如求和函数、打印函数等,参数数组就非常方便。
- 示例:
class MathUtils
{
public int Sum(params int[] numbers)
{
int result = 0;
foreach (int num in numbers)
{
result += num;
}
return result;
}
}
MathUtils math = new MathUtils();
int[] numbersArray = {1, 2, 3};
int result1 = math.Sum(numbersArray);
- 也可以直接传递多个参数,编译器会自动将它们组合成一个数组:
int result2 = math.Sum(4, 5, 6);
- 注意事项:
- 参数数组必须是方法的最后一个参数。这样可以确保编译器能够正确地解析方法调用,因为在遇到
params
参数后,后面不能再有其他常规参数。