C# 方法(Methods)详解

什么是方法(Method)

方法(Method)是 C# 中用于封装一组执行特定功能代码的成员。通过方法,可以提高代码的复用性、可读性和维护性。

简单来说,方法就是完成某项任务的代码块。


一、方法的基本语法

复制代码
访问修饰符 返回类型 方法名(参数列表)
{
    // 方法体
    return 返回值;
}

示例

cs 复制代码
using System;

class Program
{
    static void Main()
    {
        SayHello();
    }

    static void SayHello()
    {
        Console.WriteLine("Hello World!");
    }
}

输出:

cs 复制代码
Hello World!

1.方法组成部分

以以下方法为例:

cs 复制代码
public static int Add(int a, int b)
{
    return a + b;
}

组成部分说明:

组成部分 说明
public 访问修饰符
static 静态方法
int 返回值类型
Add 方法名称
(int a, int b) 参数列表
return 返回结果

1.1无参数无返回值方法

cs 复制代码
static void PrintMessage()
{
    Console.WriteLine("欢迎学习C#");
}

调用:

复制代码
PrintMessage();

特点:

  • 没有参数
  • 没有返回值
  • 返回类型使用 void

1.2有参数无返回值方法

cs 复制代码
static void PrintName(string name)
{
    Console.WriteLine("姓名:" + name);
}

调用:

复制代码
PrintName("张三");

输出:

复制代码
姓名:张三

1.3无参数有返回值方法

cs 复制代码
static string GetTime()
{
    return DateTime.Now.ToString();
}

调用:

cs 复制代码
string time = GetTime();
Console.WriteLine(time);

1.4有参数有返回值方法

cs 复制代码
static int Sum(int num1, int num2)
{
    return num1 + num2;
}

调用:

cs 复制代码
int result = Sum(10, 20);
Console.WriteLine(result);

输出:

复制代码
30

二、参数传递方式

1. 值传递(默认)

cs 复制代码
static void ChangeValue(int num)
{
    num = 100;
}

int a = 10;
ChangeValue(a);

Console.WriteLine(a);

输出:

复制代码
10

说明:

  • 方法修改的是副本
  • 原变量不受影响

2. ref 参数

必须先赋值才能传入。

cs 复制代码
static void ChangeValue(ref int num)
{
    num = 100;
}

int a = 10;
ChangeValue(ref a);

Console.WriteLine(a);

输出:

复制代码
100

3. out 参数

用于返回多个结果。

cs 复制代码
static void GetData(out string name, out int age)
{
    name = "张三";
    age = 18;
}

string name;
int age;

GetData(out name, out age);

4. in 参数

只读引用传递。

cs 复制代码
static void Show(in int num)
{
    Console.WriteLine(num);
}

特点:

  • 性能高
  • 方法内部不可修改

可选参数

复制代码
static void ShowInfo(string name, int age = 18)
{
    Console.WriteLine($"{name}-{age}");
}

调用:

复制代码
ShowInfo("张三");
ShowInfo("李四", 25);

输出:

复制代码
张三-18
李四-25

命名参数

复制代码
ShowInfo(age: 20, name: "王五");

优点:

  • 提高代码可读性
  • 参数顺序可调整

params 可变参数

允许传入不确定数量的参数。

cs 复制代码
static int Sum(params int[] nums)
{
    int total = 0;

    foreach (int num in nums)
    {
        total += num;
    }

    return total;
}

调用:

cs 复制代码
Console.WriteLine(Sum(1,2,3));
Console.WriteLine(Sum(1,2,3,4,5));

输出:

复制代码
6
15

方法重载(Overload)

同一个方法名,不同参数列表。

cs 复制代码
static int Add(int a, int b)
{
    return a + b;
}

static double Add(double a, double b)
{
    return a + b;
}

static int Add(int a, int b, int c)
{
    return a + b + c;
}

调用:

复制代码
Add(1, 2);
Add(1.5, 2.5);
Add(1, 2, 3);

三、递归方法

方法调用自身。

计算阶乘

cs 复制代码
static int Factorial(int n)
{
    if (n == 1)
        return 1;

    return n * Factorial(n - 1);
}

调用:

复制代码
Console.WriteLine(Factorial(5));

输出:

复制代码
120

四、静态方法与实例方法

1.静态方法

属于类本身。

cs 复制代码
class MathHelper
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

调用:

复制代码
MathHelper.Add(1, 2);

实例方法

属于对象。

cs 复制代码
class Person
{
    public void SayHello()
    {
        Console.WriteLine("你好");
    }
}

调用:

cs 复制代码
Person p = new Person();
p.SayHello();

2.表达式主体方法

适用于简单逻辑。

复制代码
static int Square(int x) => x * x;

等价于:

复制代码
static int Square(int x)
{
    return x * x;
}

3.局部函数(Local Function)

方法内部定义方法。

cs 复制代码
static void Main()
{
    int Add(int a, int b)
    {
        return a + b;
    }

    Console.WriteLine(Add(1, 2));
}

方法设计原则

单一职责原则

一个方法只完成一项功能。

❌ 不推荐:

复制代码
void Process()
{
    // 查询数据
    // 计算数据
    // 保存数据
    // 打印日志
}

✅ 推荐:

cs 复制代码
GetData();
CalculateData();
SaveData();
WriteLog();

方法命名规范

推荐使用动词开头:

复制代码
GetUser()
CreateOrder()
DeleteFile()
UpdateData()
SaveChanges()

避免:

复制代码
Data()
User()
Info()

总结

C# 方法是实现代码复用和模块化开发的重要基础。掌握方法的定义、调用、参数传递(值、ref、out、in)、可选参数、可变参数、方法重载、递归以及静态与实例方法的区别,有助于编写结构清晰、易维护的程序。在实际开发中,应遵循单一职责原则和规范的命名习惯,使代码更加专业和高效。