C#语言基础知识要点

1. 程序结构与编译机制

  • 基本构成:C# 程序由命名空间、类、方法、属性和语句块等组成。
  • 程序集 (Assembly).cs 源文件通过编译器编译成程序集(.exe.dll)。它是 .NET 的打包和部署单元。
  • 入口点 :应用程序必须包含一个 Main 方法或使用 顶级语句 作为执行入口。
  • dotnet 工具:用于管理、构建和运行 .NET 源代码的命令行工具。

2. 语法规范

  • 标识符:区分大小写。通常局部变量小写开头,方法和类大写开头。
  • 关键字 :大部分为保留字。若要使用关键字做标识符,需加 @ 前缀。
  • 注释 :支持单行 (//)、多行 (/*...*/) 和 XML 文档注释 (///)。

3. 类型系统

值类型 (Value Types)

  • 包含 :内置数值类型、boolcharstructenum
  • 特点 :直接存储数据值,赋值时会进行实例复制

引用类型 (Reference Types)

  • 包含classstring、数组、委托、接口。
  • 特点 :包含对象引用和对象本身,赋值时仅复制引用
  • 存储 :对象分配在堆 (Heap) 上,引用通常在栈 (Stack) 上。

类型转换

  • 隐式转换 :编译器确保转换安全且无信息丢失(如 intlong)。
  • 显式转换:可能导致信息丢失或失败,需使用强制转换符。

4. 数值与布尔类型

  • 整数 :包含有符号 (int, long 等) 和无符号 (uint, ulong 等) 类型。C# 9 引入了原生大小的 nintnuint
  • 实数floatdouble(用于科学计算,有舍入误差)和 decimal(高精度,用于金融)。
  • 溢出检查 :默认不检查(周而复始),可用 checked 运算符显式开启溢出检查。
  • 布尔类型bool (true/false),不可与数值类型直接转换。

5. 字符串与字符

  • char:表示 16 位 Unicode 字符。
  • string :不可变的字符序列,虽然是引用类型,但其相等运算遵循值语义
  • 特性
  • 原意字面量@"" 不处理转义字符。
  • 字符串插值$"" 允许在大括号中嵌入表达式。

6. 数组

  • 特性:元素存储在连续内存中,索引从 0 开始。

  • 索引与范围 (C# 8)

  • ^n:从末尾计算索引。

  • ..:切片操作(如 1..3)。

  • 多维数组 :分为矩形数组 (int[,]) 和锯齿数组 (数组的数组 int[][])。

7. 变量与参数传递

  • 栈与堆:栈负责局部变量和参数(生命周期随函数);堆负责对象实例(由垃圾回收器管理)。
  • 参数传递修饰符
  • ref:按引用传递,传入前需初始化。
  • out:按引用传递,用于多返回值,传入前不要求初始化,但方法内必须赋值。
  • in (C# 7):按引用传递,但方法内不可修改(只读)。
  • params:允许方法接收可变数量的参数。

8. 运算符与 Null 处理

  • Null 运算符

  • ?? (合并):左侧为 null 则返回右侧值。

  • ??= (赋值):左侧为 null 则将右侧值赋给它。

  • ?. (条件访问):左侧为 null 则直接返回 null,不抛异常。

  • 优先级 :赋值、Null 合并、条件运算符是右结合的。

9. 控制流语句

  • 选择语句if-elseswitch

  • switch 增强 :支持按类型 switch、模式匹配及 switch 表达式

  • 循环语句whiledo-whileforforeach(用于遍历集合)。

  • 跳转语句breakcontinuegotoreturnthrow

10. 命名空间 (Namespace)

  • 作用:组织类型,避免命名冲突。
  • using 指令 :导入命名空间或静态成员 (using static)。
  • C# 10 新特性
  • 文件范围命名空间namespace MyNamespace; 减少嵌套。
  • 全局 usingglobal using 在整个项目中生效。
相关推荐
牛奔2 分钟前
Go 是如何做抢占式调度的?
开发语言·后端·golang
符哥200810 分钟前
C++ 进阶知识点整理
java·开发语言·jvm
小猪咪piggy10 分钟前
【Python】(4) 列表和元组
开发语言·python
難釋懷23 分钟前
Lua脚本解决多条命令原子性问题
开发语言·lua
CoderCodingNo31 分钟前
【GESP】C++ 二级真题解析,[2025年12月]第一题环保能量球
开发语言·c++·算法
独好紫罗兰35 分钟前
对python的再认识-基于数据结构进行-a005-元组-CRUD
开发语言·数据结构·python
chilavert3181 小时前
技术演进中的开发沉思-356:重排序(中)
java·开发语言
devmoon1 小时前
为 Pallet 搭建最小化 Mock Runtime 并编写单元测试环境
开发语言·单元测试·区块链·智能合约·polkadot
Coder_Boy_1 小时前
Java开发者破局指南:跳出内卷,借AI赋能,搭建系统化知识体系
java·开发语言·人工智能·spring boot·后端·spring
Mr_Xuhhh1 小时前
介绍一下ref
开发语言·c++·算法