C#基础语法

一、基本数据类型

  1. **值类型**

* **整数类型** :包括 `byte`、`short`、`int`、`long`

* **浮点数类型** :`float`(单精度,约 7 位有效数字)和 `double`(双精度,约 15 - 16 位有效数字)。表示小数时默认为 `double` 类型,若要指定为 `float`,需在数值后加 `f` 或 `F`。

* **字符类型** :`char`,用于表示单个 Unicode 字符,用单引号括起来。例如:`char c = 'A';`

* **布尔类型** :`bool`,只有两个值 `true` 和 `false`。

  1. **引用类型**

* **字符串** :`string`,表示字符序列,用双引号括起来。字符串具有不可变性,即一旦创建,其内容不能改变。

* **数组** :用于存储多个相同类型的数据。例如:`int[] numbers = new int[5];` 表示创建一个长度为 5 的整型数组。

* **类** :用于定义对象的蓝图,通过 `new` 关键字创建对象实例。

二、变量与常量

  1. **变量声明与初始化**

* 显式类型声明:`类型 变量名 = 初始值;` 例如:`int x = 10;`

* 隐式类型声明(`var`):`var 变量名 = 初始值;` 编译器会根据初始值推断变量类型。但 `var` 不能用于返回值类型不明确的表达式,如 `var result = new object();` 会导致错误。

* 多变量声明:`类型 变量 1, 变量 2, ..., 变量 n;` 例如:`int a, b, c;`

  1. **常量**

* 使用 `const` 关键字声明常量,必须在声明时初始化,且其值不能改变。例如:`const double PI = 3.14159;`

三、运算符与表达式

  1. **算术运算符** :`+`、`-`、`*`、`/`、`%`(取模)。

  2. **关系运算符** :`==`(等于)、`!=`(不等于)、`>`(大于)、`<`(小于)、`>=`(大于等于)、`<=`(小于等于)。关系运算结果为布尔值。

  3. **逻辑运算符**

* `&&`(逻辑与):只有两个操作数都为 `true` 时结果才为 `true`。

* `||`(逻辑或):只要有一个操作数为 `true` 结果就为 `true`。

* `!`(逻辑非):对布尔值取反。

四、流程控制

  1. **条件语句**

* `if` 语句:`if (条件) { 语句块 }`,当条件为 `true` 时执行语句块。

* `if-else` 语句:`if (条件) { 语句块 1 } else { 语句块 2 }`,条件为 `true` 执行语句块 1,否则执行语句块 2。

* `switch` 语句:用于多分支选择。例如:

* `switch (表达式) { case 值 1: 语句块 1; break; case 值 2: 语句块 2; break; ... default: 语句块 n; break; }`

* 每个 `case` 后跟一个值,当表达式与某个值相等时执行对应的语句块。`default` 是可选的,用于处理所有不匹配的情况。在 C# 7.0 及以上版本中,`switch` 的 `case` 分支可以使用模式匹配,例如:`case int i:` 表示当表达式结果是整数时匹配。

  1. **循环语句**

* `for` 循环:`for (初始化; 条件; 迭代) { 语句块 }`。先执行初始化语句,然后在每次循环前检查条件,若条件为 `true` 执行语句块,最后执行迭代语句。

* `while` 循环:`while (条件) { 语句块 }`,条件为 `true` 时重复执行语句块。

* `do-while` 循环:`do { 语句块 } while (条件);`,先执行语句块,然后再检查条件,至少执行一次语句块。

* `foreach` 循环:用于遍历数组或集合中的元素。例如:`foreach (类型 变量名 in 集合) { 语句块 }`,`变量名` 依次取集合中的每个元素。

五、数组和集合

  1. **数组**

* 一维数组:声明格式为 `类型[] 数组名 = new 类型[长度];` 例如:`int[] numbers = new int[5];` 可以通过索引(从 0 开始)访问数组元素,如 `numbers[0]`。

* 二维数组:声明格式为 `类型[,] 数组名 = new 类型[行数, 列数];` 例如:`int[,] matrix = new int[3, 4];` 访问元素如 `matrix[0, 0]`。

* 尽量避免使用 `var` 声明数组,例如 `var arr = new[] {1, 2, 3};` 会导致数组类型推断为 `int[]`,但不如直接用 `int[] arr = new int[]{1, 2, 3};` 清晰明确。

  1. **集合** :例如 `List<T>`,是一种更灵活的数组实现,可以动态调整大小。需要引用 `System.Collections.Generic` 命名空间。例如:`List<int> list = new List<int>(); list.Add(1); list.Add(2);` 等。

六、类型转换

  1. **隐式类型转换** :安全的转换,不会导致数据丢失。例如:`int x = 10; long y = x;` 将 `int` 类型转换为 `long` 类型。

  2. **显式类型转换** :可能会导致数据丢失或异常,需在转换前检查是否安全。例如:`double price = 99.9; int roundedPrice = (int)price;` 将 `double` 类型转换为 `int` 类型,小数部分被舍弃。

  3. **使用 `Convert` 类进行转换** :例如:`string numberStr = "123"; int parsedNumber = Convert.ToInt32(numberStr);` 可以进行各种类型之间的转换,但要确保转换有效,否则会抛出异常。

  4. **类型检查与转换** :使用 `is` 运算符检查对象是否为某个类型,如 `if (obj is int) { ... }`。使用 `as` 运算符进行安全的类型转换,如 `int? number = obj as int?;`,若转换失败返回 `null`。

相关推荐
wfeqhfxz25887826 小时前
YOLO13-C3k2-GhostDynamicConv烟雾检测算法实现与优化
人工智能·算法·计算机视觉
毕设源码-朱学姐6 小时前
【开题答辩全过程】以 基于JavaWeb的网上家具商城设计与实现为例,包含答辩的问题和答案
java
Aaron15886 小时前
基于RFSOC的数字射频存储技术应用分析
c语言·人工智能·驱动开发·算法·fpga开发·硬件工程·信号处理
C雨后彩虹7 小时前
CAS与其他并发方案的对比及面试常见问题
java·面试·cas·同步·异步·
_不会dp不改名_8 小时前
leetcode_3010 将数组分成最小总代价的子数组 I
算法·leetcode·职场和发展
java1234_小锋8 小时前
Java高频面试题:SpringBoot为什么要禁止循环依赖?
java·开发语言·面试
2501_944525549 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 账户详情页面
android·java·开发语言·前端·javascript·flutter
计算机学姐9 小时前
基于SpringBoot的电影点评交流平台【协同过滤推荐算法+数据可视化统计】
java·vue.js·spring boot·spring·信息可视化·echarts·推荐算法
Filotimo_9 小时前
Tomcat的概念
java·tomcat