2.4 方法与参数传递
方法的基本概念
方法是C#中用于封装可重用代码块的基本单元,通过方法可以实现代码的模块化和逻辑复用。一个标准的方法包含以下部分:
- 访问修饰符(如public/private)
- 返回类型(void表示无返回值)
- 方法名称(使用PascalCase命名规范)
- 参数列表(可选)
- 方法体(包含执行代码)
// 方法定义示例
public int Add(int num1, int num2)
{
return num1 + num2;
}
参数传递方式
C#支持多种参数传递机制:
1. 值传递(默认方式)
- 传递参数的副本
- 方法内修改不会影响原始变量
void ModifyValue(int x) {
x = 10; // 不影响原始值
}
2. 引用传递(ref关键字)
- 传递变量的内存地址
- 方法内修改会影响原始变量
void ModifyRef(ref int x) {
x = 10; // 修改原始值
}
3. 输出参数(out关键字)
- 用于从方法返回多个值
- 必须在方法内赋值
void GetValues(out int x, out int y) {
x = 5;
y = 10;
}
4. 参数数组(params关键字)
- 允许传递可变数量的参数
- 必须是方法的最后一个参数
int Sum(params int[] numbers) {
return numbers.Sum();
}
方法重载
允许在同一作用域内定义多个同名方法,只要它们的参数列表不同:
- 参数类型不同
- 参数数量不同
- 参数顺序不同(不推荐)
// 重载示例
void Display(int num) { /*...*/ }
void Display(string text) { /*...*/ }
void Display(int num, string text) { /*...*/ }
可选参数与命名参数
可选参数
- 为参数提供默认值
- 必须出现在必需参数之后
void Greet(string name, string prefix = "Mr.") {
Console.WriteLine($"Hello, {prefix} {name}");
}
命名参数
- 调用时显式指定参数名
- 提高代码可读性
Greet(prefix: "Dr.", name: "Smith");
最佳实践
- 单一职责原则:每个方法应只完成一个明确的任务
- 合理的方法长度:建议不超过20-30行代码
- 有意义的命名:方法名应清晰表达其功能
- 参数数量控制:建议不超过3-4个参数,过多考虑使用对象封装
- 异常处理:在方法内部处理预期异常或向上抛出
示例:综合应用
public class Calculator
{
// 方法重载
public int Add(int a, int b) => a + b;
public double Add(double a, double b) => a + b;
// 输出参数
public bool TryDivide(int dividend, int divisor, out double result) {
if (divisor == 0) {
result = 0;
return false;
}
result = (double)dividend / divisor;
return true;
}
// params参数
public int Sum(params int[] numbers) => numbers.Sum();
}
// 使用示例
var calc = new Calculator();
calc.Add(2, 3);
calc.Add(2.5, 3.7);
if (calc.TryDivide(10, 3, out var result)) {
Console.WriteLine($"Result: {result}");
}
var total = calc.Sum(1, 2, 3, 4, 5);
