C# - 方法
C# - 方法
Section titled “C# - 方法”方法(Method)是执行特定任务的可重用代码块。方法是 C# 程序的构建块,它允许你将代码组织成逻辑的、可管理单元。每个 C# 应用程序都从一个名为 Main 的特殊方法开始执行。
使用方法涉及两个步骤:
- 定义方法:描述方法做什么、它需要什么(参数)以及它返回什么。
- 调用方法:执行方法内部的代码。
在 C# 中定义方法的语法如下:
<访问修饰符> <返回类型> <方法名称>(<参数列表>){ // 方法体 // 执行任务的代码}- 访问修饰符:决定可见性(例如,
public,private)。public方法可以从任何地方调用,而private方法只能从同一类内部调用。 - 返回类型:方法发送回的值的数据类型。如果方法不返回值,使用
void关键字。 - 方法名称:方法的描述性名称,遵循 PascalCase 命名约定(例如,
CalculateSum)。 - 参数列表:方法的输入变量的逗号分隔列表,用括号括起来。如果没有参数,使用空括号
()。每个参数都有一个类型和一个名称。 - 方法体:包含方法被调用时执行的语句的代码块。
示例:一个简单的方法
Section titled “示例:一个简单的方法”public class Greeter{ // 一个没有参数且没有返回值的方法 public void SayHello() { Console.WriteLine("Hello, World!"); }
// 一个带有参数和返回值的方法 public int Add(int a, int b) { int sum = a + b; return sum; }}要调用方法,你需要它所属的类的实例(除非它是 static 方法)。然后使用点(.)运算符。
using System;
public class Greeter{ public void SayHello() => Console.WriteLine("Hello, World!"); public int Add(int a, int b) => a + b;}
public class Program{ public static void Main(string[] args) { // 创建 Greeter 类的实例 var greeter = new Greeter();
// 调用 SayHello 方法 greeter.SayHello(); // 输出: Hello, World!
// 调用 Add 方法并存储结果 int result = greeter.Add(10, 5); Console.WriteLine($"The sum is: {result}"); // 输出: The sum is: 15 }}现代 C# 方法特性
Section titled “现代 C# 方法特性”表达式主体成员 (=>)
Section titled “表达式主体成员 (=>)”对于只包含单个表达式的方法,你可以使用一种更简洁的语法,称为表达式主体成员。
public class Calculator{ // 传统方法体 public int Multiply(int x, int y) { return x * y; }
// 使用表达式主体的相同方法 public int Add(int x, int y) => x + y;}你可以在另一个方法内部定义一个方法。这些方法被称为局部函数,并且只在包含它们的方法内部可见。它们对于不需要在其他地方公开的辅助例程很有用。
public void ProcessOrders(IEnumerable<Order> orders){ foreach (var order in orders) { // ... 某些逻辑 ... Log(order.Id, "Processing"); // ... 更多逻辑 ... Log(order.Id, "Completed"); }
// 局部函数只能在 ProcessOrders 内部访问 void Log(int orderId, string message) { Console.WriteLine($"[{DateTime.Now:T}] Order {orderId}: {message}"); }}C# 提供了几种向方法传递参数的方式,每种方式都有不同的行为。
| 关键字 | 描述 |
|---|---|
| (无) | 值传递。传入参数的副本。方法内部对参数的更改不会影响原始变量。 |
ref | 引用传递。传入参数的引用。方法内部对参数的更改会影响原始变量。变量在传入前必须被初始化。 |
out | 输出引用传递。用于从方法返回多个值。调用代码无需初始化变量,但方法在返回前必须给它赋值。 |
in | 输入引用传递。传入引用是为了性能(避免复制),但方法不能修改变量。变量在传入前必须被初始化。 |
示例:out 参数
Section titled “示例:out 参数”out 的一个常见用例是 int.TryParse 方法,它尝试将字符串解析为整数,并返回一个布尔值表示成功与否,同时通过 out 参数提供结果。
string userInput = "123";
// 我们直接在调用处声明 'parsedValue'if (int.TryParse(userInput, out int parsedValue)){ Console.WriteLine($"Successfully parsed: {parsedValue}");}else{ Console.WriteLine("Invalid number.");}方法设计的最佳实践
Section titled “方法设计的最佳实践”- 单一职责原则:一个方法应该只做一件事,并把它做好。避免创建处理太多任务的庞大方法。
- 清晰命名:为方法使用描述性的、动词开头的名称(例如,
GetUserById,CalculateTotalPrice)。 - 保持简短:目标是创建简短、集中的方法。如果一个方法变得太长,考虑将其分解为更小的私有辅助方法或局部函数。
- 为简洁使用表达式主体:如果一个方法只有一行代码,表达式主体成员(
=>)可以提高可读性。