C#基础学习笔记
写在最前
- 这篇笔记对应的是唐老狮的C#四部曲──C#基础课程地址
一、复杂数据类型
复杂数据类型概述
- 特点
- 一般是多个数据(变量)集合在一起构成的数据。
- 一般可以自己取名字,可以自定义的数据(变量)。
- 类型:
- 枚举:整形常量的集合,可以自定义
- 数组:任意变量类型的顺序存储的数据
- 结构体:任意变量的数据集合,可以自定义
枚举
- 概念:被命名的整形常量的集合,一般用于表示状态、类型。
- 声明枚举和声明枚举变量是两个概念。
- 声明枚举:创建一个自定义的枚举类型。
- 声明枚举变量:使用声明的自定义枚举类型,创建一个枚举变量。
- 声明枚举
1 | //在namespace语句块中声明(常用) |
- 声明枚举变量
1 | //在函数语句块中 |
- 枚举的类型转换
- 枚举和int转换:
- 枚举转int:()强转
- int转枚举:隐式转换
- 枚举和sring互转:
- 枚举转string:.Tostring(); 转换的是枚举项名
- string转枚举:(枚举类型)Enum.Parse(typeof(枚举类型),“枚举项名”)
- 枚举和int转换:
数组
- 数组是存储一组相同类型数据的集合
- 数组分为一维、多维、交错数组
- 一维数组就简称为数组
一维数组
- 数组的声明
1 | //变量类型[] 数组名;只是声明了一个数组,并未初始化 |
- 数组的使用
1 | int[] array = {1,2,3,4,5}; |
二维数组
- 二维数组的声明
1 | //变量类型[,] 二维数组变量名; |
- 二维数组的使用
1 | //1. 二维数组的长度 |
交错数组
- 交错数组的声明
1 | //变量类型[][] 交错数组名; |
- 交错数组的使用
1 | //1. 交错数组的长度 |
二、值类型和引用类型
分类
- 引用类型
string, 数组, 类 - 值类型
sbyte, short, int, long, byte, ushort, uint, ulong, float, double, decimal, bool, char, 枚举, 结构体
区别
- 表现
- 值类型,在相互赋值时,把内容拷贝给了对方,它变我不变。
- 引用类型的相互赋值是让两者指向同一个值,它变我也变。
- 原因
- 值类型存储在栈空间,系统分配,自动回收,小而快。
- 引用类型存储在堆空间,手动申请和释放,大而慢。
特殊的引用类型
- string 是非常特殊的引用类型,它的特征是它变我不变。
- 频繁地改变string重新赋值会产生内存垃圾。
三、函数
函数基础
- 基本概念
- 定义:具有名称的代码块,可以使用名称来使用代码块
- 作用:封装代码、提升代码复用率、抽象行为
- 位置
- class语句块中
- struct语句块中
- 语法
1 | static 返回类型 函数名(参数类型 参数名1,参数类型参数名2,……) |
- 使用
1 | class Myclass |
ref & out
- 使用
- 函数参数的修饰符
- 当传入值类型参数在内部修改时,或者引用类型参数在内部重新声明时,让外部值同时变化。
1 | //ref 和 out 的使用方法一模一样 |
- 区别
- ref 传入的变量必须初始化,out 不用。
- out 传入的变量必须在内部赋值,ref 不用。
变长参数和默认值
- 变长参数
- params 数组类型 数组名;
- 后面必须是数组,数组可以是任意类型。
- params一定是最后一组参数且最多只有一个,前面可以有任意个参数。
1 | class Myclass |
- 默认参数
- 作用:当函数没有传入参数,则会使用默认参数。
- 如果要混用可选参数,必须写在普通参数后面。
1 | class Myclass |
函数重载
- 基本概念
- 同一语句块中(class或struct)函数名相同:⑴参数数量不同⑵参数数量相同,类型或顺序不同。
- 作用:⑴减少函数名数量,避免命名空间污染⑵提升程序的可读性。
- 实例
- 重载和返回值类型无关,只和参数类型、数量、顺序有关。
- 调用时,程序会自动根据传入参数类型判断使用哪一个重载。
- ref 和 out 相当于改变了变量类型,所以可以用在重载中,但是不能同时修饰,会被认为是一样的。
1 | class Myclass |
递归函数
- 函数里面调用同名函数
- 一个正确的递归函数需要:⑴必须有结束调用的条件⑵条件必须能够达到停止的目的。
1 | class Myclass |
四、复杂数据类型──结构体
- 基本概念
- 自定义变量类型
- 数据和函数的集合
- 可以声明各种变量和方法
- 用来表现存在关系的数据集合
- 基本语法
1 | //写在namespace里面 |
- 访问修饰符
- Public 公共的,可以被外部访问
- private 私有的,只能内部使用
- 默认是私有的
- 构造函数
- 没有返回值
- 函数名必须和结构体名相同
- 必须要有参数
- 如果声明了构造函数,必须对其中堆所有变量数据初始化
五、排序初探
冒泡排序
- 两两相邻,不停比较,不停交换,比较n轮
- 代码实现
1 | //优化,用标识来判断是否已经是排序最终形态 |
选择排序
- 新建中间商,依次比较,找出极值,放入目标位置,比较n轮
- 代码实现
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 橙菌!