C#语言基础知识要点

1. 程序结构与编译机制

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

2. 语法规范

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

3. 类型系统

值类型 (Value Types)

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

引用类型 (Reference Types)

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

类型转换

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

4. 数值与布尔类型

  • 整数 :包含有符号 (int, long 等) 和无符号 (uint, ulong 等) 类型。C# 9 引入了原生大小的 nint 和 nuint。
  • 实数 :float、double(用于科学计算,有舍入误差)和 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-else、switch。

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

  • 循环语句 :while、do-while、for、foreach(用于遍历集合)。

  • 跳转语句 :break、continue、goto、return、throw。

10. 命名空间 (Namespace)

  • 作用:组织类型,避免命名冲突。
  • using 指令 :导入命名空间或静态成员 (using static)。
  • C# 10 新特性:
  • 文件范围命名空间 :namespace MyNamespace; 减少嵌套。
  • 全局 using :global using 在整个项目中生效。
相关推荐
2601_962885726 小时前
如何用 Python 自动识别股票的支撑位与压力位?
开发语言·python
爱吃奥利奥_wen6 小时前
面向对象三板斧:封装、继承、多态,到底在“装“什么、“承“什么、“变“什么?
开发语言·经验分享·c#
我可能是个假开发7 小时前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
WL学习笔记8 小时前
日期类(C++)
开发语言·c++·日期类实现
谢亮_vipxieliang9 小时前
Go map与结构体的正确使用
开发语言·golang·哈希算法
H.莓飛9 小时前
【C++】命名空间、缺省参数、函数重载与引用
linux·开发语言·c++·visual studio
xxwl5859 小时前
数据结构知识点和代码实现总结(C语言实现)
c语言·开发语言·数据结构
code2cat12 小时前
Java进阶篇之AtomicMarkableReference:引用还在,标记已经改变
java·开发语言·cas·并发编程·逻辑删除
CappuccinoRose12 小时前
FormData数据处理
开发语言·前端·javascript·表单数据
Zguigo12 小时前
【CUDA8】第一个CUDA C++ Kernel --vector add
java·开发语言·c++