C#个人学习笔记之方法(函数)的介绍和使用--004
·
C# 方法(函数)超详细笔记
一、方法是什么
方法:是一段可重复调用、完成特定功能的代码块,作用:代码复用、简化逻辑、结构清晰。
C# 中方法必须定义在类/结构体内部,不能单独写在类外面。
二、方法完整语法格式
[访问修饰符] [返回值类型] 方法名([参数列表])
{
// 方法体:业务逻辑代码
[return 返回值;]
}
各部分说明
- 访问修饰符(控制访问权限,常用)
public:公开,任何地方都能调用(最常用)private:私有,仅当前类内部可调用(默认)
- 返回值类型
- 有返回值:写具体类型(
int/string/bool等),方法内必须用return返回数据 - 无返回值:写
void,不需要return(也可单独写return;提前结束方法)
- 有返回值:写具体类型(
- 方法名
- 命名规范:帕斯卡命名法(首字母大写,多个单词首字母都大写)
- 例:
GetSum、ShowInfo、CalculateArea
- 参数列表(可选)
- 无参数:括号留空
() - 有参数:
数据类型 参数名,多个参数用逗号分隔
- 无参数:括号留空
三、分类 + 实战示例(由浅入深)
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);
四、方法调用规则
-
非静态方法(上面所有示例)
- 必须实例化类对象:
类名 对象名 = new 类名(); - 通过对象调用:
对象名.方法名(参数);
- 必须实例化类对象:
-
静态方法(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)
概念
同一个类中,多个方法名相同,但参数列表不同(参数个数、类型、顺序不同),就是方法重载。
作用:同一个功能,适配不同参数场景。
重载判断规则(满足其一即可)
- 参数个数不同
- 参数类型不同
- 参数顺序不同(不同类型参数)
注意:仅返回值不同,不算重载!
示例
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;
}
}
七、递归方法(重点难点)
概念
方法自己调用自己,称为递归。
使用场景:阶乘、斐波那契数列、遍历目录等重复嵌套逻辑。
递归必备两个条件(缺一不可,否则死循环)
- 递归出口(终止条件):满足条件不再调用自己
- 递归调用:逐步向出口靠近
示例:求 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);
八、笔记总结
- 方法结构:修饰符 + 返回值 + 方法名 + 参数 + 方法体
void无返回值,有返回值必须写return- 静态方法
static:类名直接调用;非静态:实例对象调用 - 参数分类:普通参数、可选参数、
params可变参数、ref引用、out输出 - 方法重载:方法名相同,参数列表不同
- 递归:自调用,必须设置终止条件
更多推荐
所有评论(0)