17.C#基础语法知识总结

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)xx=(E_Name)ix.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 数组、stringclass
特殊说明 string 不可变,赋新值时会指向新对象

核心

  • 值类型 → 快、小、复制安全;
  • 引用类型 → 灵活、共享同一数据;
  • 选用:按数据大小与共享需求决定。

string

特性 string
类型 引用类型(特殊)
赋值行为 复制引用,但重写赋值会创建新实例
可变性 不可变(Immutability)
存储位置 堆(Heap)
性能影响 频繁拼接会产生垃圾,建议使用 StringBuilder 优化
典型用法 文本处理、日志、格式化输出

核心

  • 虽为引用类型,却表现为“它变我不变”(不可变)。
  • 每次赋新值都在堆上创建新对象。
  • 大量字符串操作要用 StringBuilder 或等效结构以减少内存开销。

函数

函数基础

  • 定义:命名的代码块,用于封装、复用、抽象。

  • 位置:只能写在 classstruct 中,不能嵌套在方法里。

  • 语法

    static 返回类型 名称(参数列表) { … [return 值]; }
    

    void 必须 return

refout

  • 作用:让函数内修改影响调用者。

  • 区别

    • 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);
    

递归

  • 定义:函数自己调用自己。

  • 必须

    1. 存在可变的终止条件。
    2. 终止条件能被满足。
  • 示例

    static void Fun(int n) {
      if (n>10) return;
      Console.WriteLine(n);
      Fun(n+1);
    }
    

结构体

  • 概念:自定义的值类型,字段 + 方法 的集合,用于表示一组相关数据(如学生、矩形、玩家等)。

  • 声明位置:只能写在 namespaceclass/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

×

喜欢就点赞,疼爱就打赏