方法基础
什么是方法
方法是执行特定任务的代码块。将重复逻辑封装为方法,可以提高代码的复用性和可读性。
C# 的方法必须定义在类或结构体内部,这与 C 语言中独立的函数不同。使用顶级语句时,可以定义局部函数。
方法定义与调用
语法格式
TEXT
访问修饰符 返回类型 方法名(参数列表)
{
方法体
}
示例
CSHARP
using System;
class Program
{
static void SayHello()
{
Console.WriteLine("Hello, World!");
}
static void Main()
{
SayHello();
SayHello();
}
}
TEXT
Hello, World!
Hello, World!
💡 调用方法时,使用
方法名(参数) 的形式。方法只需定义一次,可以多次调用。
参数与返回值
带参数的方法
参数让方法可以接收外部传入的数据,从而处理不同的输入。
示例
CSHARP
using System;
class Program
{
static void Greet(string name)
{
Console.WriteLine("你好, " + name + "!");
}
static void Main()
{
Greet("小明");
Greet("小红");
}
}
TEXT
你好, 小明!
你好, 小红!
带返回值的方法
返回值让方法可以将计算结果传回调用者。
示例
CSHARP
using System;
class Program
{
static int Add(int a, int b)
{
return a + b;
}
static void Main()
{
int result = Add(3, 5);
Console.WriteLine("3 + 5 = " + result);
Console.WriteLine("10 + 20 = " + Add(10, 20));
}
}
TEXT
3 + 5 = 8
10 + 20 = 30
形参与实参
| 概念 | 说明 | 示例 |
|---|---|---|
| 形参(形式参数) | 方法定义中的参数 | static int Add(int a, int b) 中的 a、b |
| 实参(实际参数) | 调用方法时传入的值 | Add(3, 5) 中的 3、5 |
⚠️ 形参是变量声明,实参是具体的值或表达式。调用时实参的值会传递给对应的形参。
return 语句
return 语句有两个作用:
- 将结果返回给调用者
- 立即退出方法,后续代码不再执行
示例
CSHARP
using System;
class Program
{
static string GetGrade(int score)
{
if (score >= 90)
return "优秀";
if (score >= 60)
return "及格";
return "不及格";
}
static int Max(int a, int b)
{
if (a > b)
return a;
else
return b;
}
static void Main()
{
Console.WriteLine(GetGrade(95));
Console.WriteLine(GetGrade(70));
Console.WriteLine(GetGrade(45));
Console.WriteLine("较大值: " + Max(12, 8));
}
}
TEXT
优秀
及格
不及格
较大值: 12
⚠️ 一旦执行
return,方法立即结束。非 void 方法中所有代码路径都必须返回值。
void 方法
void 表示方法没有返回值。void 方法不需要 return 语句,但可以用 return; 提前退出。
示例
CSHARP
using System;
class Program
{
static void PrintLine(int length)
{
if (length <= 0)
return;
string line = new string('-', length);
Console.WriteLine(line);
}
static void PrintInfo(string name, int age)
{
Console.WriteLine("姓名: " + name);
Console.WriteLine("年龄: " + age);
}
static void Main()
{
PrintInfo("小明", 18);
PrintLine(20);
PrintLine(-5);
}
}
TEXT
姓名: 小明
年龄: 18
--------------------
📌
return; 在 void 方法中仅用于提前退出,不返回任何值。
方法的调用栈
调用栈是程序执行方法时的内存管理机制。每次调用方法时,会在栈上压入一个栈帧,方法返回时弹出。
示例
CSHARP
using System;
class Program
{
static int Square(int x)
{
return x * x;
}
static int SumOfSquares(int a, int b)
{
int sa = Square(a);
int sb = Square(b);
return sa + sb;
}
static void Main()
{
int result = SumOfSquares(3, 4);
Console.WriteLine("结果: " + result);
}
}
TEXT
结果: 25
调用过程如下:
TEXT
1. Main() 入栈
2. SumOfSquares(3, 4) 入栈
3. Square(3) 入栈 → 返回 9 → 出栈
4. Square(4) 入栈 → 返回 16 → 出栈
5. SumOfSquares 返回 25 → 出栈
6. Main → 输出 25 → 出栈
ℹ️ 栈遵循"后进先出"原则。方法嵌套越深,栈帧越多。栈空间有限,递归过深会导致栈溢出。
方法命名规范
C# 方法命名使用 PascalCase(帕斯卡命名法):每个单词首字母大写,不使用下划线。
| 风格 | 示例 | 语言 |
|---|---|---|
| PascalCase | CalculateTotal、GetUserName |
C# |
| snake_case | calculate_total、get_user_name |
C、Python |
示例
CSHARP
using System;
class Program
{
static double CalculateArea(double radius)
{
return 3.14159 * radius * radius;
}
static bool IsValidAge(int age)
{
return age >= 0 && age <= 150;
}
static void PrintUserInfo(string name, int age)
{
Console.WriteLine(name + ", " + age + "岁");
}
static void Main()
{
double area = CalculateArea(5.0);
Console.WriteLine("面积: " + area);
Console.WriteLine("年龄有效: " + IsValidAge(25));
PrintUserInfo("小明", 25);
}
}
TEXT
面积: 78.53975
年龄有效: True
小明, 25岁
✅ 方法名应使用动词或动词短语开头,如
Get、Set、Calculate、Is、
表达式体方法
C# 6.0 引入了表达式体方法,用 => 简化单行方法的写法。
示例
CSHARP
using System;
class Program
{
static int Square(int x) => x * x;
static double CircleArea(double r) => 3.14159 * r * r;
static bool IsAdult(int age) => age >= 18;
static void Main()
{
Console.WriteLine(Square(7));
Console.WriteLine(CircleArea(3.0));
Console.WriteLine(IsAdult(20));
}
}
TEXT
49
28.27431
True
🚀
=> 是 lambda 表达式的简写形式,等价于 { return 表达式; },仅适用于单行逻辑。
值传递
C# 默认使用值传递:值类型复制数据,引用类型复制引用。
示例
CSHARP
using System;
class Program
{
static void TryChange(int x)
{
x = 999;
}
static void Main()
{
int num = 10;
TryChange(num);
Console.WriteLine("num = " + num);
}
}
TEXT
num = 10
⚠️ 值传递时,形参是实参的副本。方法内修改形参不影响实参的值。
多种返回类型
方法可以返回各种类型:int、double、string、bool 等。
示例
CSHARP
using System;
class Program
{
static int GetLength(string text)
{
return text.Length;
}
static double GetAverage(int a, int b)
{
return (a + b) / 2.0;
}
static bool IsPositive(double value)
{
return value > 0;
}
static string BuildGreeting(string name)
{
return "欢迎, " + name + "!";
}
static void Main()
{
Console.WriteLine(GetLength("Hello"));
Console.WriteLine(GetAverage(3, 4));
Console.WriteLine(IsPositive(-2.5));
Console.WriteLine(BuildGreeting("小明"));
}
}
TEXT
5
3.5
False
欢迎, 小明!
❓ 常见问题
Q 方法可以没有参数吗?
A 可以,参数列表留空即可,如
static void SayHi()。
Q:一个方法可以有多个 return 语句吗? A:可以,但非 void 方法中每条执行路径都必须返回一个值。
Q:void 方法能使用 return 吗? A:可以,使用 return; 提前退出,但不能返回任何值。
Q:形参和实参名字必须相同吗? A:不需要,它们是独立的变量,名字可以不同。
Q:C# 方法能独立于类存在吗? A:不能,C# 方法必须在类或结构体内,但顶级语句中可定义局部函数。
📖 小节
- 方法由访问修饰符、返回类型、方法名和参数列表组成
- 形参是定义时的变量,实参是调用时传入的值
return返回结果并退出方法,void 方法无返回值- 调用栈管理方法执行的内存,遵循后进先出原则
- C# 方法命名使用 PascalCase 规范
- 表达式体方法
=>简化单行方法定义 - 默认值传递:值类型复制数据,修改形参不影响实参
📝 作业
- 编写一个
static int Factorial(int n)方法,计算 n 的阶乘并返回结果 - 编写一个
static bool IsEven(int num)方法,判断整数是否为偶数,用表达式体语法实现 - 编写一个
static void PrintMultiplicationTable(int n)方法,打印 n 的乘法表(1×n 到 9×n) - 编写一个
static string ClassifyScore(int score)方法,根据分数返回"优秀""良好""及格"或"不及格" - 编写一个
static double CalcBMI(double weight, double height)方法,根据体重(kg)和身高(m)计算 BMI 值



