当前位置: 首页 > news >正文

C#基础语法

## 一、基本数据类型
  1. **值类型**
     * **整数类型** :包括 `byte`、`short`、`int`、`long`
     * **浮点数类型** :`float`(单精度,约 7 位有效数字)和 `double`(双精度,约 15 - 16 位有效数字)。表示小数时默认为 `double` 类型,若要指定为 `float`,需在数值后加 `f` 或 `F`。
     * **字符类型** :`char`,用于表示单个 Unicode 字符,用单引号括起来。例如:`char c = 'A';`
     * **布尔类型** :`bool`,只有两个值 `true` 和 `false`。

  2. **引用类型**
     * **字符串** :`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;`

  2. **常量**
     * 使用 `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:` 表示当表达式结果是整数时匹配。

  2. **循环语句**
     * `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};` 清晰明确。

  2. **集合** :例如 `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`。
 

http://www.xdnf.cn/news/792343.html

相关文章:

  • DMA-BUF与mmap共享内存对比分析
  • 辩证唯物主义精要
  • 【Golang】使用gin框架导出excel和csv文件
  • 基于Python协同过滤的电影推荐系统研究
  • DDR信号线走线关键点
  • Vert.x学习笔记-EventLoop与Handler的关系
  • WebTracing:一站式前端埋点监控解决方案
  • 多线程编程中的重要概念
  • CSP模式下如何保证不抖动
  • 查询去重使用 DISTINCT 的性能分析
  • Ubuntu安装Docker命令清单(以20.04为例)
  • 文件批量重命名
  • Tiktok App 登录账号、密码、验证码 XOR 加密算法
  • C++指针加减法详解:深入理解指针运算的本质
  • ES6 Promise 状态机
  • 外贸建站平台推荐
  • shell脚本的常用命令
  • 2024年认证杯SPSSPRO杯数学建模D题(第二阶段)AI绘画带来的挑战解题全过程文档及程序
  • Linux 命令全讲解:从基础操作到高级运维的实战指南
  • 人脸识别技术应用备案系统已开启!
  • Python趣学篇:Pygame重现《黑客帝国》数字雨
  • ArcGIS Pro 3.4 二次开发 - 地图创作 2
  • 车规级BMS芯片国产化!精准电量监测延长电池寿命
  • JS语法笔记
  • PyTorch——非线性激活(5)
  • Linux系统下Google浏览器无法使用中文输入的临时解决方案
  • AIGC学习笔记(9)——AI大模型开发工程师
  • OD 算法题 B卷【代码编辑器】
  • 第十一章 注解
  • AI数据集构建:从爬虫到标注的全流程指南