- 博客(8)
- 收藏
- 关注
原创 C#依赖注入常用的几种方式
1、构造器注入 通过构造器进行依赖注入 public class MyClass { private IMyInterFace _myinterface; public MyClass (IMyInterFace myinterface) { this._myinterface = myinterface; } } 2、Se...
2018-08-17 13:11:31 17026
原创 简述依赖注入(DI)控制反转(IOC)与依赖倒置(DIP)
什么是依赖? 当A类需要实例化B类后使用B类的成员才可正常工作时 我们称作A类对B类产生了依赖 什么是抽象? c#中的抽象有抽象类和接口 依赖倒置 这个概念很唬人,看起来就像是在说 把依赖倒过来 但是 依赖倒置其实指的是 [上层]不应该依赖于[下层] 它们都应该依赖于[抽象] 控制反转 也是个唬人的说法,并不是字面意思上的反转 而是 将[控制权]交给第三方 依赖注入 ...
2018-08-17 12:17:27 747
原创 6.C#async/await异步编程
async/await是一种优雅的异步实现 这里只是讲一下应该明确的重点 仅用async标记方法并不会使其本质发生改变 被async标记过之后,函数中就可使用await关键字,但是如果不使用await关键字,该方法也只是个同步方法 await关键字并不会造成线程阻塞,主线程依旧在活动 把await关键字放在耗时操作前,可以把耗时操作交给其他线程异步执行,主线程不会阻塞,然后在被标记的耗时...
2018-08-09 17:11:36 604
原创 5.C#线程管理初探
一个进程可以包含单个或多个线程 线程用Thread表示 任务代表需要执行的操作,用Task表示 线程池是多个线程的集合,决定如何向线程分配任务,用ThreadPool表示 一个任务开始时线程池分配线程来进行工作,工作完毕后解除分配 多线程有不确定性,C#中经常用lock语句(锁)进行处理,lock表示该部分的代码只能由一个线程进行处理,其它线程运行到此处时将被挂起,直到这部分代码被第...
2018-08-08 18:03:42 468
原创 4.C#委托和事件
C#中的委托是一种观察者模式的简便实现方式,可以避免大量的编码 .net内置有可以符合大部分需求的委托Func和Action Func有一个TResult返回值 而Action没有返回值 自定义委托使用delegate关键字 委托可以被一些方法订阅,订阅了委托的方法称为订阅者 使用+=操作符订阅,使用-=操作符取消订阅 事件是委托的一种安全实现 一般使用内置的EventHandle...
2018-08-08 11:45:27 256
原创 3.C#中const和readonly的区别
const是一个静态的常量,必须在创建时进行初始化且无法改变 readonly不是静态的,在创建时的初始化是可选的,并且可以在构造函数中对其进行操作 class Program { readonly static int a; const int b = 3; static Program() { ...
2018-08-08 09:53:46 182
原创 2.C#引用参数ref与输出参数out
ref与out在以下代码中都可编译成功 但是有本质上的区别 static void Test(ref int i) { i = 2; } static void Main(string[] args) { int a = 1; Test(ref a); } ref可将在Main方法中定义的参数a读取到 static void Test(ref int i) ...
2018-08-05 20:31:31 270
原创 1.C#预处理指令
这个系列只是我个人不常用的东西会集合起来记录一下 C#只支持定义常量 不支持预处理宏 /*----------------------------------------*/ //定义预处理符号 #define //取消符号定义 #undef /*----------------------------------------*/ //可用于在不同情况下加载不同代码 #if #else #el...
2018-07-30 22:55:01 213
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人