当前位置: 首页 > article >正文

C#方法之详解

一、方法基础语法‌

C#方法是封装代码逻辑的基本单元,用于执行特定操作并支持模块化编程‌。

  1. 定义与结构‌
    C#方法由访问修饰符、返回值、方法名、参数列表和方法体构成。基础语法如下:
[访问修饰符] [static] 返回值类型 方法名(参数列表)  
{  
    // 方法体  
}  
  • 访问修饰符‌:public、private 等控制方法可见性,默认类内方法为 private‌。
  • 返回值‌:无返回值时使用 void,否则需声明具体类型(如 int、string)‌。
  1. 参数传递‌
  • 值类型与引用类型‌:值类型参数传递副本,引用类型(如类对象)传递内存地址‌。
  • ‌可选参数‌:通过默认值实现,调用时可省略:
public void Print(string text, bool isBold = false) { ... }  
Print("Hello"); // 自动使用 isBold = false  
  • ‌命名参数‌:调用时指定参数名,提高可读性:
Print(isBold: true, text: "Warning");  
  • 可变参数‌:使用 params 接收数组:
public int Sum(params int[] numbers) { ... }  
Sum(1, 2, 3);  

二、方法重载与特殊类型‌

  1. 方法重载‌
    同一类中允许定义多个同名方法,‌参数列表必须不同‌(类型、数量或顺序):
public void Log(int code) { ... }  
public void Log(string message) { ... } // 合法重载  

注:返回值类型不参与重载判定‌。

  1. 静态方法‌
  • 使用 static 修饰,直接通过类名调用,无需实例化对象‌46。
  • 示例:
public static class MathUtils  
{  
    public static int Add(int a, int b) => a + b;  
}  
int sum = MathUtils.Add(3, 5);  
  1. 扩展方法‌
    通过 this 关键字为现有类型添加新方法,需在静态类中定义:
public static class StringExtensions  
{  
    public static bool IsNumeric(this string str)  
    {  
        return int.TryParse(str, out _);  
    }  
}  
bool result = "123".IsNumeric(); // 返回 true  
  1. 构造函数‌
    用于初始化对象,与类同名且无返回值:
public class Person  
{  
    public string Name { get; set; }  
    public Person(string name) => Name = name;  
}  

三、高级方法特性‌

  1. 异步方法‌
    使用 async/await 实现非阻塞操作,适用于I/O密集型任务:
public async Task<string> FetchDataAsync(string url)  
{  
    HttpClient client = new HttpClient();  
    return await client.GetStringAsync(url);  
}  

注:异步方法需返回 Task 或 Task 类型‌。

  1. ‌Lambda表达式‌
    简化匿名方法的定义:
Func<int, int> square = x => x * x;  
Console.WriteLine(square(5)); // 输出 25  
  1. ‌递归方法‌
    方法直接或间接调用自身,需注意终止条件:
public int Factorial(int n)  
{  
    if (n == 0) return 1;  
    return n * Factorial(n - 1);  
}  

四、使用建议

  1. 代码规范‌
  • 单一职责原则‌:每个方法仅完成一个明确任务‌。
  • 命名清晰‌:方法名使用动词短语(如 CalculateTax、ValidateInput)。

http://www.kler.cn/a/580926.html

相关文章:

  • 【C++】 命令空间 不具名命名空间 具名命名空间
  • AI智能眼镜主控芯片:技术演进与产业生态的深度解析
  • 利用微软的 HTML 应用程序宿主程序的攻击
  • 使用Process Explorer、Dependency Walker和PE信息查看工具快速排查dll动态库因库与库版本不一致导致的加载失败问题
  • MyBatis底层原理深度解析:动态代理与注解如何实现ORM映射
  • C++蓝桥杯基础篇(十一)
  • Markdown 语法入门指南(VSCode 版)
  • 记录一次openwebui部署无法使用知识库的问题
  • Ubuntu本地部署Open manus(完全免费可用)
  • 电商项目中如何选择安全高效的电商API接口?
  • Flutter 学习之旅 之 flutter 全屏背景图设置功能的简单实现
  • 每日一题----------String 和StringBuffer和StringBuiler重点
  • VSCode 2025最新前端开发必备插件推荐汇总(提效指南)
  • Python 编写第一个网络爬虫教程
  • 面向高质量视频生成的扩散模型方法-算法、架构与实现【附核心代码】
  • 【Java 面试 八股文】计算机网络篇
  • 解锁Android Framework:AOA通信全攻略
  • UI-APP---基于HBuilder X的微信小程序
  • Nuxt3 ssr build/dev时区分不同的环境
  • 内网激活JRebel插件(无网络环境)