C#
2021-03-08 01:18:19 1 举报
AI智能生成
C#知识点,持续更新
作者其他创作
大纲/内容
C#发展历程
C#1.0(VS2002)
C#2.0(VS2005)
C#3.0(VS2008)
C#4.0/.NET Framework4.0(VS2010)
C#5.0/.NET Framework4.5(VS2012)
C#6.0/.NET Framework4.6(VS2015)
只读自动属性
自动属性初始化器
using static导入单个类的静态成员
Null条件运算符,将成员访问.替换为?.
字符串内插:$字符串拼接
异常筛选器 catch(xxx) when (xxx)
nameof表达式的计算结果为符号的名称
await关键字可在catch,finally表达式中使用
使用索引器初始化关联集合
集合初始值设定项中的扩展Add方法
改进了重载解析:可直接使用函数名而非()=>函数名()通过委托
确定性的编译器选项
C#7.0/.NET Framework4.7(VS2017)
元组
async可修饰main方法
C#8.0/.NET Framework4.8(VS2019)
C#基础
数值类型
float和double基于2,decimal基于10
布尔类型
布尔类型仅需要1位,但却使用了1字节内存空间
.NET Framework System.Collections提供了BitArray类,仅占用1位
引用类型是否相等是基于引用句柄的
字符串和字符
char表示一个Unicode字符并占用两个字节,、\u或者\x转义字符通过4位十六进制代码来指定任意Unicode字符
@原意字符串,不支持转义字符,实际什么样就是什么样。$@注意顺序,这样就可以不用因为换行而苦恼
数组(引用类型变量)
矩形数组
GetLength方法返回给定维度的长度
锯齿形数组
内层维度不指定
变量
静态字段也存储在堆上,存活到应用程序域结束
默认值
default关键字可用于获得任意类型的默认值
参数
参数修饰符 无 按值传入(哪怕是引用类型的实参,依旧创建副本)
ref和out按引用传递。无论参数是引用类型还是值类型,都可以按引用传递或按值传递
ref和out按引用传递。无论参数是引用类型还是值类型,都可以按引用传递或按值传递
out:不需要在传入函数之前进行赋值,必须在函数结束之前赋值.
通过下划线_丢弃此输出变量
通过下划线_丢弃此输出变量
C#应用
Winform开发
WPF开发
C#多线程
线程技术的发展
Thread
ThreadPool
并行扩展框架 C#4.0
TPL
并发集合
PLINQ
异步函数async await C#6.0
线程基础
创建线程 t.Start()
线程休眠 t.Sleep(xxx)
线程等待 t.Join()
线程优先级 t.Priority = ThreadPriority.Highest/Lowest
前后台线程 t.IsBackgroud = true
lock
Monitor
线程同步
原子操作Interlocked数学运算
Mutex类 互斥锁 进程间同步
SemaphoreSlim类 线程间同步,混合模式
ManualResetEvent类 混合模式 开关门
CountDownEvent类 等待一定数量的操作完成
Barrier类 多阶段组织多个线程及时在某个时刻碰面
ReaderWriterLockSlim类 共享独占锁:读取次数远大于写入次数用此类
线程池
APM 异步编程模型
delegate.BeginInvoke(para1,para2,...,AsyncCallBack,Object@obejct)=IAsyncResult
ThreadPool.QueueUserWorkItem(委托,状态值)
CancellationTokenSource
token.IsCancellationRequested
token.ThrowIfCancellationRequested()
token.Register(委托)取消后执行委托方法
ThreadPool.RegisterWaitForSingleObject线程池等待事件处理器
System.Threading.Timer(callback,state,dueTime,periodTime)
Timer.Stop()停止计时器
EAP编程模型 BackgroudWorker
WorkerReportProgress报到进度更新
WorkerSupportsCancellation支持异步取消操作
WorkerSupportsCancellation支持异步取消操作
DoWork
ProgressChanged 通过bw.ReportProgress(e.ProgressPercentage,e.UserState)
RunWorkerCompleted
ProgressChanged 通过bw.ReportProgress(e.ProgressPercentage,e.UserState)
RunWorkerCompleted
任务并行库 TPL
Task三种启动方式
t.Start()
Task.Run()
Task.Factory.StaryNew()
组合任务
APM转Task.Factory.FromAsync()
EAP转TaskCompletionSource
取消 Task.Run(委托,取消);
TaskScheduler配置任务执行 task.ContinueWith(委托,CancellationToken.None,
TaskContinuationOptions,None,TaskScheduler.FromCurrentSynchronizationContext())
TaskContinuationOptions,None,TaskScheduler.FromCurrentSynchronizationContext())
async await
对连续的异步任务使用 await顺序执行
并行执行异步任务 await Task.WhenAll(t1,t2)
ConfigureAwait(continueOnCapturedContext:false)
默认是同步上下文,有一定的开销,但几乎不影响性能
一个轻量级的C#动态框架 ImpromptuInerface
并发集合
ConcurrentDictionary
ConcurrentBag List的并发集合
ConcurrentQueue FIFO
Enqueue入队
TryDequeue出队
ConcurrentStack LIFO
Push压栈
TryPop出栈
BlockingCollection可选并发集合
PLINQ
Parallel类
Parallel.ForEach(items,
ParallelOptions{CancellationToken,MaxDegreeOfParallelism,TaskScheduler},
Action(item,state))
ParallelOptions{CancellationToken,MaxDegreeOfParallelism,TaskScheduler},
Action(item,state))
收藏
收藏
0 条评论
下一页