二、C#基础语法( 控制结构)

在C#中,控制结构用于控制程序的流程,决定了代码的执行顺序。C#支持以下几种主要的控制结构:

  1. 条件语句:根据某个条件(布尔表达式)来决定执行的代码块。

    csharp 复制代码
    if (condition)
    {
        // 如果条件为真,则执行此代码块
    }
    csharp 复制代码
    switch (expression)
    {
        case value :
            // 当expression等于value时执行的代码块
            break;
        default :
            // 如果expression不等于任何case的值,则执行此代码块
            break;
    }
  2. 循环语句:重复执行一段代码,直到满足某个条件。

    csharp 复制代码
    while (condition)
    {
        // 当条件为真时,重复执行此代码块
    }
    csharp 复制代码
    do 
    {
        // 无论条件是否为真,此代码块至少会执行一次,然后当条件为假时停止执行
    } while (condition);
    csharp 复制代码
    for (initialization; condition; final expression)
    {
        // 当条件为真时,重复执行此代码块,并在每次循环结束时执行final expression
    }
  3. 跳转语句:改变程序的执行流程。

    csharp 复制代码
    break; // 跳出当前循环或switch语句,进入下一轮循环或结束switch语句的执行。
    continue; // 跳过当前循环的剩余部分,进入下一轮循环。
    return; // 从当前方法返回,并可选地返回一个值。
    goto; // 无条件地跳转到指定的标签位置。通常不推荐使用,因为它可以使代码变得难以理解和维护。
  4. 异常处理:用于捕获和处理运行时错误。C#中的异常处理使用try、catch和finally块。

    csharp 复制代码
    try 
    {
        // 尝试执行的代码块,可能会抛出异常。
    } 
    catch (ExceptionType e) 
    {
        // 当try代码块中的代码抛出异常时,将执行此catch块。可以捕获特定的异常类型。
    } 
    finally 
    {
        // 无论是否发生异常,finally块中的代码都将被执行。通常用于清理操作。
    } 
  5. 标签和标签语句:允许你在程序中设置标记点,并使用goto语句跳转到这些标记点。但请注意,过度使用标签和goto语句会使代码变得混乱和难以维护。通常建议尽可能避免使用goto语句。

  6. 多态性:允许子类以自己的方式实现父类的虚方法,从而实现代码的复用和灵活性。

    csharp 复制代码
    public virtual void MyMethod() 
    {
        // 虚方法的实现
    }
    
    public override void MyMethod() 
    {
        // 子类中的多态实现
    }
  7. 匿名方法和 Lambda 表达式:允许创建没有名称的方法,并作为表达式使用。Lambda 表达式常用于事件处理、委托调用等场景。

    csharp 复制代码
    delegate int Del(int x); // 定义委托类型
    Del func = x => x * x; // 定义匿名方法,并将其赋值给委托类型
  8. 延迟执行 :通过使用 asyncawait 关键字,允许异步方法的调用,使得非阻塞性操作成为可能。这在处理耗时操作(如网络请求)时非常有用。

    csharp 复制代码
    public async Task MyAsyncMethod() 
    {
        await AnotherMethodAsync(); // 等待另一个异步方法完成
    }
  9. 遍历器和迭代器 :通过 yield 关键字,允许方法返回一个可迭代的对象,用于简化集合的遍历。这对于创建自定义的集合类型特别有用。

  10. 运算符重载:允许为自定义类型定义运算符的行为,使得自定义类型可以像内置类型一样使用运算符。

  11. 异常和错误处理 :使用 try, catch, finallythrow 关键字来处理运行时异常和错误。

  12. 事件和委托:允许对象之间松耦合地通信,通过订阅和发布事件来实现。委托是事件的基础,用于封装方法调用。

  13. 强制类型转换和显式转换 :通过使用 (type)as 关键字,允许将一个类型的对象转换为另一个类型。如果转换失败,as 关键字会返回 null

  14. 属性(Properties)和自动实现的属性(Auto-Implemented Properties):属性是类的字段的封装,提供了一种更安全、更灵活的方式来访问和修改字段的值。自动实现的属性简化了属性的实现过程,编译器会自动为你生成一个私有的后备字段。

  15. 索引器(Indexers):允许类或结构像数组一样被索引访问。索引器可以具有多个参数,以支持多维数组或类似的数据结构。

  16. 初始化器(Initializers):在对象创建时用于初始化对象的字段或属性。包括对象初始化器和集合初始化器。

  17. 匿名类型(Anonymous Types):用于创建一个没有显式类型的对象,通常用于简单的值类型,如只包含几个字段的记录。

  18. 局部变量和常量(Locals and Constants):用于定义作用域内可见的变量和常量,用于存储程序运行时的值或常量值。

  19. 局部方法(Local Methods):在方法内部定义的另一个方法,用于封装重复的代码块。它们可以在其父方法中重复调用。

相关推荐
接着奏乐接着舞。15 分钟前
【2026年7月最新】69道RAG面试题
前端·人工智能·后端·aigc·embedding·rag
以和为贵15 分钟前
前端也能搞懂 Agent:从 Function Calling 到自主编排
前端·人工智能·架构
栈溢出了21 分钟前
Java Lambda 表达式笔记
java·开发语言·intellij-idea
会周易的程序员22 分钟前
使用 pybind11 封装 C++ 日志库 microLog 为 Python 模块
java·c++·python·物联网·架构·日志·aiot
zhixingheyi_tian31 分钟前
一份GC日志的解读
java·开发语言
风止何安啊33 分钟前
🚦 前端并发请求 “交通管制”:别让你的接口堵成早高峰
前端·javascript·面试
J船长37 分钟前
扫盲烂笔头:A 记录、CNAME 的作用, Nginx的用途,为啥叫反向代理
前端
ywl47081208741 分钟前
ArrayList和LinkedList内部的实现原理和区别
java·java基础
妙码生花43 分钟前
从 PHP 到 AI + Golang,程序员自救转型手记(二十六):icon 组件封装
前端·vue.js·typescript
李明卫杭州43 分钟前
Vue2 & Vue3 中 Router `props` 配置详解:彻底摆脱 `$route` 依赖
前端·vue.js·前端框架