-
C# 函数传递地址的方式有
static void AddSum(ref int i, int j) { i += j; } // 调用 AddSum(ref a, b);
-
C# 中的数据类型分
值类型
和引用类型
.① 值类型: 直接存储数据的值, 保存在内存中. 一些预定义简单类型, 例如:
int
,float
,bool
,char
都是值类型, 另外enum
,struct
也是值类型② 引用类型: 存储对值的引用, 实际上存储的就是一个内存的地址.
string
,数组
,class
,interface
,委托
和封装
都是引用类型,其中 string 是比较特殊的引用类型 -
C# 泛型编程使用
where
约束约束 说明 T: struct 类型参数必须是值类型. 可以指定除 Nullable 以外的任何值类型 T: class 类型参数必须是引用类型,包括任何类、接口、委托或者数组类型 T:new() 类型参数必须具有无参数的公共构造函数. 当与其他约束一起使用时, new() 约束必须最后指定 T:<基类名> 类型参数必须是指定的基类或派生自指定的基类 T:<接口名称> 类型参数必须是指定的接口或者实现指定的接口. 可以指定多个接口约束. 约束 接口也可以是泛型的 T: U 为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数. 这称为裸类型约束
-
C# params 关键字
在 C# 中, 使用
params
关键字可以给一个方法 (method) 传递数量可变的参数 ( paramter ), 类似于python
中的*arg
注:
①
params
后面的参数类型必须是一个数组②
params
后面不允许再有其他参数③ 一个方法的申明中只能又一个
params
关键字传递方式:
① 用逗号分隔的一串参数
② 一个一维数组
③ 空参数,
length
为 0 -
C# 的装箱和拆箱
装箱是将值类型
转换为引用类型
; 拆箱是将引用类型
转换为值类型
- 异步代码要点:
① 异步代码可用于 I/O 绑定和CPU绑定代码
② 异步代码使用 Task<T>
和 Task
, 它们是对后台所完成的工作进行建模的结构
③ async
关键字将方法转换为异步方法, 这使你能在正文中使用 await
关键字
④ 应用 await
关键字后, 它将挂起调用方法, 并将控制权返还给调用方,直到等待的任务完成
⑤ 仅允许在异步方法中使用 await
- Lambda 语法
// 表达式写法
(input-parameters) => expression
// 语句写法
(input-parameters) => { <sequence-of-statements> }
- 三种委托类型
1. Func 参数数量可变, 但必须要有返回值
2. Action 参数数量可变, 无返回值
3. Predicate 参数数量可变, 返回值类型必须为 bool