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 在整个项目中生效。
相关推荐
paopaokaka_luck14 小时前
基于Springboot3+Vue3的宠物殡葬管理系统(webSocket实时通讯、接入腾讯地图、支付宝沙盒支付、Echarts图形化分析)
java·开发语言·网络·后端
逝水无殇15 小时前
HTML 元素详解
开发语言·前端·html
Lhappy嘻嘻15 小时前
网络初识|基础入门:局域网广域网、IP 端口、TCP/IP 五层模型与封装解封装全过程
java·开发语言·网络·笔记·网络协议·tcp/ip
Wang's Blog15 小时前
Go-Zero基础入门1: 微服务框架与选型分析
开发语言·微服务·golang
科技道人1 天前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
逝水无殇1 天前
C# 异常处理详解
开发语言·后端·c#
玖玥拾1 天前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
铅笔侠_小龙虾1 天前
Rust 学习目录
开发语言·学习·rust
云泽8081 天前
从零吃透 C++ 异常:抛出捕获、栈展开、异常重抛与编码规范详解
开发语言·c++·代码规范
灯澜忆梦1 天前
GO---可见性规则
开发语言·golang