方法定义与参数
方法签名、ref/in/out 参数、命名参数/可选参数、params 可变参数
方法定义与参数
C# 方法支持 ref、in、out 三种参数修饰符——精细控制传参方式。
学完本章你将: 掌握方法签名、ref/in/out 参数、params、表达式体方法。
方法基本形式
csharp
// 传统方法体
static int Add(int a, int b)
{
return a + b;
}
// 表达式体方法(单行简写)
static int Multiply(int a, int b) => a * b;
// void 方法
static void Log(string msg) => Console.WriteLine($"[{DateTime.Now}] {msg}");
ref / in / out
csharp
// ref —— 引用传递,方法内可修改,调用前必须初始化
void Swap<T>(ref T a, ref T b)
{
(a, b) = (b, a);
}
int x = 1, y = 2;
Swap(ref x, ref y); // x=2, y=1
// out —— 输出参数,方法负责赋值,调用前可不初始化
bool TryParseInt(string s, out int result)
{
return int.TryParse(s, out result);
}
if (TryParseInt("42", out var num))
Console.WriteLine(num); // 42
// in —— 只读引用(防止拷贝大结构体)
double Distance(in Point p1, in Point p2) => /* ... */;
params 可变参数
csharp
static int Sum(params int[] numbers)
{
return numbers.Sum();
}
int total = Sum(1, 2, 3, 4, 5); // 可以传任意数量
// params 也支持 Span(C# 13+)
// static int Sum(params ReadOnlySpan<int> numbers);
命名参数 + 可选参数
csharp
static void Print(string name, int age = 18, string city = "北京")
{
Console.WriteLine($"{name}, {age}, {city}");
}
Print("小明", city: "上海"); // 跳过中间的 age
Print(age: 30, name: "小红"); // 乱序也没问题