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 int5;` 表示创建一个长度为 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 int5;` 可以通过索引(从 0 开始)访问数组元素,如 `numbers0`。

* 二维数组:声明格式为 `类型, 数组名 = new 类型行数, 列数;` 例如:`int, matrix = new int3, 4;` 访问元素如 `matrix0, 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`。

相关推荐
guodingdingh2 小时前
软件开发工作问题总结0718
java·开发语言·数据库
咖啡八杯4 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
GuWenyue4 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
优橙教育4 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
糖果店的幽灵4 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
我叫洋洋5 小时前
C ++ [ hello world ]
c语言·c++·算法
腻害兔5 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
碎光拾影6 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
奋发向前wcx6 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
Miao121317 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言