Z
ZHANK
编程在线教程C# 教程方法定义与参数
方法

方法定义与参数

方法签名、ref/in/out 参数、命名参数/可选参数、params 可变参数

方法定义与参数

C# 方法支持 refinout 三种参数修饰符——精细控制传参方式。

学完本章你将: 掌握方法签名、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: "小红");     // 乱序也没问题