C# 方法(Methods)
下面是关于 C# 方法(Methods) 的全面、专业、详细的讲解,并提供多途径使用方式和实用技巧。
一、什么是方法(Method)?
方法是执行某种操作或返回某个值的 代码块,它是类或结构中定义的成员。
- 方法可以包含参数并返回结果。
- 方法的设计是封装行为的主要方式,是面向对象中封装与复用的关键。
二、C# 方法的基本结构
[访问修饰符] [返回类型] 方法名([参数列表])
{
// 方法体
// 语句
return [值];
}
🔹 示例:
public int Add(int a, int b)
{
return a + b;
}
三、方法的组成详解
| 组成部分 | 说明 |
|---|---|
| 访问修饰符 | public, private, protected, internal 控制方法可见性 |
| 返回类型 | 方法执行完毕后返回的值类型,如 int, void, string, 自定义类型等 |
| 方法名 | 遵循 Pascal 命名法,如 CalculateTotal, GetData |
| 参数列表 | 方法接收的输入,可以为多个,有默认值、可选、引用、输出等方式 |
| 方法体 | 方法的主体逻辑 |
return 语句 | 返回值(如果有),void 类型可省略 |
四、常见类型方法举例
1. 无参无返回值
public void SayHello()
{
Console.WriteLine("Hello!");
}
2. 有参有返回值
public double Multiply(double x, double y)
{
return x * y;
}
3. 默认参数(C# 支持)
public void Greet(string name = "Guest")
{
Console.WriteLine($"Hello, {name}!");
}
4. 可变参数(params)
public int Sum(params int[] numbers)
{
return numbers.Sum();
}
5. 引用参数(ref)
public void UpdateValue(ref int number)
{
number += 10;
}
6. 输出参数(out)
public bool TryParseInt(string input, out int result)
{
return int.TryParse(input, out result);
}
五、方法重载(Overloading)
同一个类中可以定义多个同名方法,只要参数类型或个数不同。
public void Print(string msg) { }
public void Print(string msg, int count) { }
public void Print(int code) { }
📌 重载提高了方法的灵活性与可读性。
六、局部函数(C# 7+)
可在方法内部定义一个函数,只在当前方法作用域内有效:
public void MainLogic()
{
int Add(int x, int y) => x + y;
Console.WriteLine(Add(2, 3));
}
七、递归方法
方法调用自身,用于解决递归问题,如阶乘、斐波那契等。
public int Factorial(int n)
{
if (n == 1) return 1;
return n * Factorial(n - 1);
}
八、异步方法(async/await)
异步方法用于非阻塞操作,如网络请求、文件 I/O。
public async Task<string> DownloadDataAsync(string url)
{
using HttpClient client = new HttpClient();
return await client.GetStringAsync(url);
}
九、静态方法 vs 实例方法
| 类型 | 特点 | 示例 |
|---|---|---|
| 实例方法 | 需创建对象才能调用 | person.SayHello() |
| 静态方法 | 属于类本身,可直接调用 | Math.Sqrt(25) |
十、最佳实践建议
- ✅ 方法名应表达清晰意图,如
CalculateTax()、IsValidEmail()。 - ✅ 一个方法只做一件事(Single Responsibility Principle)。
- ✅ 长方法应拆分为多个小方法以提升可读性。
- ✅ 使用注释和 XML 文档注释帮助他人理解方法目的。
十一、权威文档参考
十二、实用拓展:委托与方法指针
你还可以将方法作为参数传递:
public delegate void LogDelegate(string message);
public void LogMessage(string msg)
{
Console.WriteLine(msg);
}
LogDelegate log = LogMessage;
log("This is a log.");
更多详细内容,请关注其他相关文章!