17.总结
17.1 知识点
学习的主要内容
强调
17.2 核心要点速览
枚举
- 定义:命名整型常量集合(默认从 0 起增,可手动赋值)
- 声明:
enum E_Name { A, B = 5, C }
(仅限 namespace/class/struct) - 使用:
E_Name x = E_Name.B; if(x==E_Name.A)… switch(x){…}
- 转换:
(int)x
|x=(E_Name)i
|x.ToString()
|Enum.Parse(...)
- 价值:替代魔法数,提升可读性。
数组
特性 | 一维数组 | 二维数组 | 交错数组 |
---|---|---|---|
维度 | 1 | 2 | N×可变(数组的数组) |
声明 | T[] a = {…} new T[n] |
T[,] a = new T[r,c] |
T[][] a = new T[n][] |
长度 | a.Length |
a.GetLength(0) /a.GetLength(1) |
a.Length (行)a[i].Length (列) |
访问 | a[i] |
a[i,j] |
a[i][j] |
可变性 | 定长,扩缩需重建新数组 | 定行定列,扩缩需重建新数组 | 每行可单独扩缩 |
常用场景 | 线性数据、列表 | 矩阵运算、表格 | 行列不规则的数据集合 |
初始化示例 | int[] a = {1,2,3} |
int[,] m = {{1,2},{3,4}} |
int[][] j = { new[]{1,2}, new[]{3} } |
值和引用
使用和存储
特性 | 值类型 | 引用类型 |
---|---|---|
存储位置 | 栈(Stack) | 堆(Heap) |
赋值行为 | 复制实际值 → 独立副本 | 复制引用 → 共享同一对象 |
修改影响 | 改变副本,不影响原变量 | 改变对象,所有引用都会看到 |
示例 | int a=10; int b=a; |
int[] a={1}; int[] b=a; |
典型类型 | 整数、浮点、struct 等 |
数组、string 、class 等 |
特殊说明 | — | string 不可变,赋新值时会指向新对象 |
核心:
- 值类型 → 快、小、复制安全;
- 引用类型 → 灵活、共享同一数据;
- 选用:按数据大小与共享需求决定。
string
特性 | string |
---|---|
类型 | 引用类型(特殊) |
赋值行为 | 复制引用,但重写赋值会创建新实例 |
可变性 | 不可变(Immutability) |
存储位置 | 堆(Heap) |
性能影响 | 频繁拼接会产生垃圾,建议使用 StringBuilder 优化 |
典型用法 | 文本处理、日志、格式化输出 |
核心:
- 虽为引用类型,却表现为“它变我不变”(不可变)。
- 每次赋新值都在堆上创建新对象。
- 大量字符串操作要用
StringBuilder
或等效结构以减少内存开销。
函数
函数基础
定义:命名的代码块,用于封装、复用、抽象。
位置:只能写在
class
或struct
中,不能嵌套在方法里。语法:
static 返回类型 名称(参数列表) { … [return 值]; }
非
void
必须return
。
ref
和 out
作用:让函数内修改影响调用者。
区别:
ref
:参数必须先初始化,内部可赋可不赋。out
:参数无需初始化,内部必须赋值。
调用:
FooRef(ref x); FooOut(out y);
变长参数 params
用途:允许 0…n 个同类型实参。
要点:只能有一个,写在参数列表末尾,类型为数组。
static int Sum(params int[] nums) { … }
可选参数(默认值)
用途:未传值时使用默认值。
要点:所有默认参数必须放在必选参数之后。
static void Speak(string msg = "…") { … }
函数重载
定义:同名方法通过参数数量、类型、顺序区分;与返回值无关。
示例:
Calc(int a,int b); Calc(float a,float b); Calc(int a,params int[] xs);
递归
定义:函数自己调用自己。
必须:
- 存在可变的终止条件。
- 终止条件能被满足。
示例:
static void Fun(int n) { if (n>10) return; Console.WriteLine(n); Fun(n+1); }
结构体
概念:自定义的值类型,字段 + 方法 的集合,用于表示一组相关数据(如学生、矩形、玩家等)。
声明位置:只能写在
namespace
或class
/struct
外层,不能在方法内。语法:
struct Name { // 字段(变量) public 类型 字段1; … // 构造函数(可选) public Name(参数…) { this.字段=…; … } // 方法 public void Func() { … } }
访问修饰符:
public
允许外部访问private
(默认)仅内部可见
使用:
// 1. 声明 MyStruct s; // 2. 赋值字段 s.Field = …; // 3. 调用方法 s.Method(); // 或使用构造器 var s2 = new MyStruct(arg1, arg2, …);
构造函数要点:
- 无返回值,名与 struct 同名
- 必须为所有字段赋初值
特点:
- 值类型 ⇒ 赋值/传参时复制整个实例
- 轻量级,适合存储小数据集合,无需 GC 开销。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com