C# 方法(函数)超详细笔记

一、方法是什么

方法:是一段可重复调用、完成特定功能的代码块,作用:代码复用、简化逻辑、结构清晰。
C# 中方法必须定义在类/结构体内部,不能单独写在类外面。

二、方法完整语法格式

[访问修饰符] [返回值类型] 方法名([参数列表])
{
    // 方法体:业务逻辑代码
    [return 返回值;]
}

各部分说明

  1. 访问修饰符(控制访问权限,常用)
    • public:公开,任何地方都能调用(最常用)
    • private:私有,仅当前类内部可调用(默认)
  2. 返回值类型
    • 有返回值:写具体类型(int/string/bool 等),方法内必须用 return 返回数据
    • 无返回值:写 void,不需要 return(也可单独写 return; 提前结束方法)
  3. 方法名
    • 命名规范:帕斯卡命名法(首字母大写,多个单词首字母都大写)
    • 例:GetSumShowInfoCalculateArea
  4. 参数列表(可选)
    • 无参数:括号留空 ()
    • 有参数:数据类型 参数名,多个参数用逗号分隔

三、分类 + 实战示例(由浅入深)

1. 无参无返回值方法(void + 无参数)

只执行逻辑,不接收参数、不返回结果。

using System;

class Demo
{
    // 定义方法
    public void SayHello()
    {
        Console.WriteLine("Hello C# 方法");
    }

    static void Main()
    {
        // 调用方法:先实例化对象,再调用
        Demo d = new Demo();
        d.SayHello(); 
    }
}

2. 有参无返回值方法(void + 带参数)

接收外部传入的数据,执行逻辑。

public void PrintInfo(string name, int age)
{
    Console.WriteLine($"姓名:{name},年龄:{age}");
}

// 调用
d.PrintInfo("张三", 20);

3. 无参有返回值方法(有返回值 + 无参数)

执行后返回一个结果给调用处,必须使用 return

// 返回整数
public int GetRandomNum()
{
    Random r = new Random();
    return r.Next(1, 100); // 把结果返回
}

// 调用:接收返回值
int num = d.GetRandomNum();
Console.WriteLine(num);

4. 有参有返回值方法(最常用)

接收参数、处理逻辑、返回结果。
示例:计算两数之和

// 求和方法
public int Add(int a, int b)
{
    return a + b;
}

// 调用
int res = d.Add(10, 20);
Console.WriteLine("和:" + res);

四、方法调用规则

  1. 非静态方法(上面所有示例)

    • 必须实例化类对象类名 对象名 = new 类名();
    • 通过对象调用:对象名.方法名(参数);
  2. 静态方法(static)
    方法加 static 修饰,属于类本身,不用实例化,直接 类名.方法名() 调用。

class Demo
{
    // 静态方法
    public static void Show()
    {
        Console.WriteLine("静态方法");
    }

    static void Main()
    {
        // 直接用类名调用
        Demo.Show();
    }
}

笔记重点:static 方法中不能直接调用非 static 方法/成员


五、方法参数进阶(高频考点/常用写法)

1. 可选参数

参数设置默认值,调用时可传参、也可省略。
规则:可选参数必须放在参数列表最后

public void Eat(string food, int count = 1)
{
    Console.WriteLine($"吃 {count}{food}");
}

// 调用
d.Eat("苹果");       // count 使用默认值 1
d.Eat("香蕉", 3);    // 手动传参覆盖默认值

2. 命名参数

调用时指定参数名,可以打乱参数顺序。

public void SendMsg(string title, string content)
{
    Console.WriteLine($"{title}{content}");
}

// 命名参数调用,顺序无关
d.SendMsg(content: "今天学习方法", title: "通知");

3. 数组参数(params 可变参数)

params 修饰,接收任意个数同类型参数,本质是数组。
规则:params 只能有一个,且必须在参数列表最后

// 求和:传入任意个整数
public int Sum(params int[] nums)
{
    int sum = 0;
    foreach (int n in nums)
    {
        sum += n;
    }
    return sum;
}

// 调用
int s1 = d.Sum(1,2,3);
int s2 = d.Sum(10,20,30,40,50);

4. ref 引用参数

  • 作用:把方法内部变量的修改,同步到外部
  • 要求:变量调用前必须先赋值,定义和调用都要加 ref
public void Change(ref int num)
{
    num = 100;
}

// 调用
int a = 10;
d.Change(ref a);
Console.WriteLine(a); // 输出 100

5. out 输出参数

  • 作用:让方法返回多个结果
  • 要求:调用前可以不赋值,方法内部必须赋值,定义和调用都加 out
// 传入两数,返回 和、差 两个结果
public void Calc(int a, int b, out int sum, out int sub)
{
    sum = a + b;
    sub = a - b;
}

// 调用
int s, su;
d.Calc(20, 10, out s, out su);

六、方法重载(Overload)

概念

同一个类中,多个方法名相同,但参数列表不同(参数个数、类型、顺序不同),就是方法重载。
作用:同一个功能,适配不同参数场景。

重载判断规则(满足其一即可)

  1. 参数个数不同
  2. 参数类型不同
  3. 参数顺序不同(不同类型参数)

注意:仅返回值不同,不算重载

示例

class Calc
{
    // 重载1:两个int
    public int Add(int a, int b)
    {
        return a + b;
    }
    // 重载2:三个int(个数不同)
    public int Add(int a, int b, int c)
    {
        return a + b + c;
    }
    // 重载3:两个double(类型不同)
    public double Add(double a, double b)
    {
        return a + b;
    }
}

七、递归方法(重点难点)

概念

方法自己调用自己,称为递归。
使用场景:阶乘、斐波那契数列、遍历目录等重复嵌套逻辑。

递归必备两个条件(缺一不可,否则死循环)

  1. 递归出口(终止条件):满足条件不再调用自己
  2. 递归调用:逐步向出口靠近

示例:求 n 的阶乘 n! = 1*2*3*...*n

public int Factorial(int n)
{
    // 递归出口
    if (n == 1)
        return 1;
    // 递归调用
    return n * Factorial(n - 1);
}

// 调用:5! = 120
int res = d.Factorial(5);

八、笔记总结

  1. 方法结构:修饰符 + 返回值 + 方法名 + 参数 + 方法体
  2. void 无返回值,有返回值必须写 return
  3. 静态方法 static:类名直接调用;非静态:实例对象调用
  4. 参数分类:普通参数、可选参数、params可变参数、ref引用、out输出
  5. 方法重载:方法名相同,参数列表不同
  6. 递归:自调用,必须设置终止条件

更多推荐