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 在整个项目中生效。
相关推荐
Ray Liang5 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Scout-leaf3 天前
WPF新手村教程(三)—— 路由事件
c#·wpf
用户298698530143 天前
程序员效率工具:Spire.Doc如何助你一键搞定Word表格排版
后端·c#·.net
mudtools4 天前
搭建一套.net下能落地的飞书考勤系统
后端·c#·.net
玩泥巴的5 天前
搭建一套.net下能落地的飞书考勤系统
c#·.net·二次开发·飞书
唐宋元明清21885 天前
.NET 本地Db数据库-技术方案选型
windows·c#
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
lindexi5 天前
dotnet DirectX 通过可等待交换链降低输入渲染延迟
c#·directx·d2d·direct2d·vortice
feifeigo1235 天前
matlab画图工具
开发语言·matlab
dustcell.5 天前
haproxy七层代理
java·开发语言·前端