C#笔记知识点梳理及思维导图
思维导图
C#语言简介和.Net框架
- C# 简介、特点、功能
- C# 相关网站
- .NET 及.NET Framework (CLR、CTS、CLS)
类:基础
- 程序基础(hello world)
- VStudio基本操作
- 输入与输出基本方法(控制台语句)
- Windows下环境变量配置
- C# 中的注释详解及(3W1H)
- 标识符(识别类、变量、函数)及
类命名规范 - C# 中的关键字
数据类型
- 值类型
- 引用类型
- 指针类型(不安全)
- 栈和堆
- 类型转换
- 强制转换(显/隐)
- Convert类
- xxx.Parse
- xxx.TryParse(string s,out xxx i)(异常处理)
- 数据精度(伪-四舍五入)
- 装箱和拆箱的基础概念
变量与常量
- 变量名的命名(驼峰式)
- 变量分类及作用域
- readonly,const关键字
运算符
- 算数运算符
- +、-、*、/、%
- ++,–
- 赋值运算符
- =
- +=、-=、*=、/=、%=
- 关系运算符
- 或、与、非
|&! - 双与
&&,双或|| - 异或
^ - 三目运算符 -
? :
- 或、与、非
- 位运算符
- 其他运算符
- 运算符优先级
语句类型
- 顺序语句
- 分支语句
- if else
- switch case
- break,continue,goto
- 循环语句
- for
- white 和 do…white
- foreach
类和对象:修饰符
- 访问修饰符
- 修饰对象:变量,属性,方法,类
- 修饰作用:限制修饰内容的访问权限
- 修饰符
- public
公有的,不受限制可任意访问 - private
私有的,只限于本类中访问 - protected
保护的,只限于本类和子类中访问 - internal
内部的,只限于程序集内访问 - protected internal
内部保护的,只限于程序集内或者子类访问
函数(方法)
- 方法的声明
- 语法格式
- 注意事项
- 方法的调用
- 调用语法
- 方法的参数
- 什么是参数?
- 参数的写法
- 参数默认值
- 特殊参数标识
- ref
- out
- param
- 位置参数,命名参数
- 方法返回值
- 概念说明
- return关键字
- 方法的重载
- 定义:使用同一个方法名,参数类型或个数不一样的函数
- 注意事项
- 方法的递归
- 定义:递归的本质就是自己调用自己。
- 要素
- 递归条件
- 递归出口
数组
- 一维数组
- 概念
- 关键字
- 声明
- 初始化
- 数组的使用
- 遍历
- 排序
- 查找
- 二维数组
- 声明
- 初始化
- 访问
- 下标取值
- 遍历数组
- 应用
- 表示地图
字符串类型
- 字符串类型
- 常用方法
- @字符
- $字符
结构体
- C#笔记(17)结构体(Struct)
- 定义,关键字
- 结构体和类
- 相同点
- 都可以有变量,属性,方法
- 都可以有静态变量,方法
- 都是使用new关键字实例化
- 不同点
- 类是引用类型,结构体是值类型
- 构造函数的使用上的不同
- 与类相比结构体无继承关系
- 结构体重不能定义虚方法
- 用途
- 相同点
枚举
- C#笔记(18)枚举(Enum)
- 面向对象 Object Oriented
- 概念定义
- 使用示例
- 类型转换
- sealed关键字
- 表示密封,可修饰类,方法
- sealed修饰的类无法被继承
- sealed只能修饰重写(override)方法
类:进阶
- C#笔记(19)类(Class)
- 定义:拥有一定特性和功能额一个类别
- 语法
class 类名{ // 实现 } - 成员
成员变量
成员方法 - new 关键字
实例化 T t1 = new T();
访问对象成员 - this关键字
表示当前对象 - static关键字
用途
修饰变量,方法,类 - 声明
写法示例
静态类的访问 - 类名.属性名
和非静态之间区别
类的特殊函数 - 构造函数
定义概念
语法规则
调用方式 - 其他构造
- 静态构造
- 创建静态构造
- 语法规则
- 私有化构造
- 限定只有本类中实例化
- 静态构造
- 析构函数
定义概念
调用方式
语法特性
面向对象
- 封装
- 原则:在程序中,尽量不要出现重复的代码
- 封装
- 类中只存储当前类有关内容
- 每一个功能模块都是一个方法
- 继承
- 概念理解
- 实现语法
- 继承后对父类的访问
- 单继承
- 子类构造
- 执行逻辑:优先执行父类构造,在执行子类构造
- 构造函数无论有参无参,无论有多少个子类都必须至少有一个和父类保持一致
- base关键字
- 语法: 子类构造:base(形参传递)
- 多态
- 向上转型(隐式转型)
- 将一个子类类型的对象称作父类类型
- 向下转型(强制转换)
- 将一个父类类型的对象称作子类类型
- 强制转换语法
- as关键字
- is关键字
- override关键字
- 重写方法只能修改方法体
- base.方法名()调用父类方法
面试问的多态 - 不同对象同一类型,这个类型的对象都可以做某一件事
- 因此不同的对象在做这件事的时候,做的方式也是不同的,当然结果也是不同的
运算符重载
- C#笔记(22)运算符重载
运算符重载
- 可重载的运算符
- 算数:+,-,x,/,%,++,–
- 关系:必须成对重载【> <】,【>= <=】,【==,!=】
- 逻辑:& | !^
- 作用
使不能进行运算的对象,运算符重载后,也能通过运算符运算
- 可重载的运算符
关键字
operator访问修饰
必须是public static定义语法
public static 返回值类型 operator 运算符(参数){//⽅法体}返回值
- 一元:返回值必须是参数类型或者参数子类型
- 二元:返回值可自定义
用途
对象与对象之间运算的快捷方式
接口
- C#笔记(23)接口(Interface)
定义,关键字
- interface 接口名称
接口实现
- 接口的实现实际上和类之间的继承是一样的,也是重写了接口中的方法,让其有了具体的实现内容。
接口中的多态实现
- 定义接口并使用类实现了接口中的成员。
- 创建接口的实例指向不同的实现类对象。
命名空间
- C#笔记(24)命名空间(Namespace)
- 命名空间
- 概念定义
- using 关键字
- 命名空间内可以包含类,接口,结构体,枚举,命名空间
- 访问命名空间内容
预处理器指令
- C#笔记(25)预处理器指令
- #define
- #warning 和 #error
- #region 和 #endregion
- #line
- #pragma
正则表达式
- C#笔记(26)正则表达式
- 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为”元字符”)。
- 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
异常处理
- C#笔记(27)异常处理
- C#笔记(40)if(){}try{}catch{}语句
- 语法概念
- 一个try可以有多个catch
- 若多个catch中没有继承关系,顺序随意
- 若多个catch有继承关系,则子类在前,父类在后
- 一个try可以有多个catch
- 自定义异常
文件的输入与输出(文件与流)
- C#笔记(28)文件的输入与输出
- 基本概念
- I/O 类
- FileStream 类
- StreamReader类
- Filelnfo类
特性(Attribute)
- C#笔记(29)特性(Attribute)
定义概念
- 特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。
规定特性
- [attribute(positional_parameters, name_parameter = value, …)]element
特性(Attribute)的名称和值是在方括号内规定的,放置在它所应用的元素之前。positional_parameters 规定必需的信息,name_parameter 规定可选的信息。
预定义特性
- AttributeUsage
- Conditional
- Obsolete
创建自定义特性
- 声明
- 构建
- 在目标元素上应用
- 通过反射访问
反射(Reflection)
- C#笔记(30)反射(Reflection)
- 概念定义
反射指程序可以访问、检测和修改它本身状态或行为的一种能力。 - 优缺点
- 优点
- 反射提高了程序的灵活性和扩展性
- 降低耦合性,提高自适应能力
- 它允许程序创建和控制任何类队形,无需提前硬编码目标类
- 缺点
- 性能问题:使用反射基本上是一种解释操作,用于字段和方法接入是要远慢于直接代码
- 使用反射会模糊程序内部逻辑;反射代码比相应的直接代码更复杂
- 优点
- 发射用途
- 它允许在运行时查看特性
- 它允许审查集合中的各种类型,以及实例化这些类型
- 它允许延迟绑定方法和属性
- 它允许在运行时创建新类型,然后使用其执行一个逻辑
- 查看元数据
属性(Property)
- C#笔记(31)属性(Property)
- 属性的基本概念
- 访问器(Accessors)
- 抽象属性(Abstract Properties)
索引器(Indexer)
- C#笔记(32)索引器(Indexer)
- 索引器(Indexer)
- 重载索引器(Indexer)
委托(Delegate)
- C#笔记(33)委托(Delegate)
- 委托定义
[访问修饰符] delegate 返回值 委托名称 (参数列表); - 关键字
delegate - 委托使用
使用示例 - 多播委托
概念说明
使用示例 - 系统带的委托
- Action
没有返回值的委托
可传递无限个参数命名空间 - Func
带有返回值的委托
最后一个参数代表返回值
最多传递16个参数和返回值
- Action
- 匿名函数
语法概念 - Lambda表达式
事件(Event)
- C#笔记(34)事件(Event)
- 事件就是一个特殊的委托对象
- 发布器(publisher)
- 订阅器(subscriber)
- 声明事件(Event)
集合(Collection)
- C#笔记(35)集合(Collection)
- Array 数组
- Array List 动态数组
- List 列表
- Dictionary 字典
泛型(Generic)
- C#笔记(36)泛型(Generic)
- 泛型
- 表示一种模糊的类型
- 泛型的应用范围
- 类/接口
- 声明泛型类 类名<泛型标识符>
- 使用泛型类 T
p = new T ();
- 方法
- 声明泛型方法 方法名<泛型>
- 用泛型作为方法返回值类型
- 用泛型作为方法参数类型
- 泛型特点
- 泛型类型不能继承
- 但泛型类和泛型接口可以继承/实现
- 在继承泛型类或泛型接口的时候必须将泛型设置为实际类型进行使用
匿名方法
- C#笔记(37)匿名方法
- 匿名方法是没有名称只有主体的方法。
- 编写匿名方法的语法
不安全代码(指针)
- C#笔记(38)不安全代码
- unsafe 修饰符标记
- 指针变量
使用指针检索数据值
传递指针作为方法的参数
使用指针访问数组元素 - 编译不安全代码
多线程
- C#笔记(39)多线程
线程定义
- 线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。
线程生命周期
- 未启动状态
- 线程实例被创建,但Start方法未被调用
- 就绪状态
- 当线程转变好运行并等待CPU周期时的状态
- 不可运行状态
- 已经调用Sleep方法
- 已经调用Wait方法
- 通过 I/O 操作阻塞
- 死亡状态
- 当线程已完成执行或终止执行的状态
- 主线程
- 进程中第一个被执行的线程称为主线程。
- 未启动状态
Thread 类常用的属性和方法
创建线程
线程是通过扩展 Thread 类创建的。管理线程
Thread 类提供了各种管理线程的方法。销毁线程
Abort() 方法用于销毁线程。
Lambda表达式
- C#笔记(41)Lambda表达式
- 匿名方法和lambad表达式
序列化、反序列化
- Unity自带-PlayerPrefs
- XML
- JSON
- Protocol Buffer(protobuf)
垃圾回收
系统类 - 数据结构(对比)
- Array 数组
必须制定类型,指定长度,内存地址连续 - Array List 动态数组
存储空间随着元素个数变换,地址不连续
内部定义好的增删改查的基础函数 - List 列表
一个引用类型的容器,只能存一种类型数据
存储空间随着元素数量进行变换 - Stack 栈
先进后出 - 枪膛上子弹 - Queue 队列
先进先出 - 超市排队 - Dictionary 字典
通过key值去找value
内部定义好的增删改查
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Winward King's Blog!
评论
