随笔分类 -  01-C#

摘要:一、Lambda 的意义 在Framework 2.0 以前,声明委托的唯一方法是通过方法命名,从Framework 2.0 起,系统开始支持匿名方法。通过匿名方法,可以直接把一段代码绑定给事件,因此减少了实例化委托所需的编码系统开销。而在 Framework 3.0 开始,Lambda表达式开始逐 阅读全文
posted @ 2019-12-23 15:24 缥缈的尘埃 阅读(1601) 评论(0) 推荐(0)
摘要:一、委托类型的来由 在使用C语言的年代,整个项目中都充满着针指的身影,那时候流行使用函数指针来创建回调函数,使用回调可以把函数回调给程序中的另一个函数。但函数指针只是简单地把地址指向另一个函数,并不能传递其他额外信息。 在.NET中,大部分时间里都没有指针的身影,因为指针被封闭在内部函数当中。可是回 阅读全文
posted @ 2019-12-22 17:11 缥缈的尘埃 阅读(1088) 评论(0) 推荐(1)
摘要:一、什么是泛型 泛型是C#2.0推出的新语法,不是语法糖,而是2.0由框架升级提供的功能。泛型类就类似于一个模板,可以在需要时为这个模板传入任何我们需要的类型。 二、为什么使用泛型 下面代码演示输出几种类型的相关信息: class Program { /// <summary> /// 打印帮助类 阅读全文
posted @ 2019-12-21 00:23 缥缈的尘埃 阅读(1024) 评论(0) 推荐(0)
摘要:一、Task.Yield Task.Yield简单来说就是创建时就已经完成的Task,或者说执行时间为0的Task,或者说是空任务,也就是在创建时就将Task的IsCompeted值设置为0。 我们知道await的Task完成时会释放线程,然后从线程池中申请新的线程继续执行await之后的代码,那产 阅读全文
posted @ 2019-12-18 14:22 缥缈的尘埃 阅读(833) 评论(0) 推荐(0)
摘要:一、异步方法返回类型 • 只能返回3种类型(void、Task和Task<T>)。 1)void返回类型:调用方法执行异步方法,但又不需要做进一步的交互。 class Program { static void Main(string[] args) { #region async & await入 阅读全文
posted @ 2019-12-16 23:21 缥缈的尘埃 阅读(1003) 评论(0) 推荐(0)
摘要:一、涉及内容 async & await是C# 5.0引入的,控制台输出所使用的$符号(拼接字符串)是C# 6.0引入的,其功能类似于string.Format()方法。 二、多线程、异步、同步之间的联系与区别 厨房案例: 比如说你要炒5道菜ABCDE,但是只有两个炉子可以用,即同时只能炒两道菜。在 阅读全文
posted @ 2019-12-14 15:59 缥缈的尘埃 阅读(1028) 评论(0) 推荐(1)
摘要:一、Task类简介 Task类是在.NET Framework 4.0中提供的新功能,主要用于异步操作的控制。它比Thread和ThreadPool提供了更为强大的功能,并且更方便使用。 Task和Task<TResult>类:前者接收的是Action委托类型;后者接收的是Func<TResult> 阅读全文
posted @ 2019-12-13 23:29 缥缈的尘埃 阅读(4022) 评论(0) 推荐(2)
摘要:一、信号量(Semaphore) 信号量(Semaphore)是由内核对象维护的int变量。当信号量为0时,在信号量上等待的线程会堵塞;信号量大于0时,就解除堵塞。当在一个信号量上等待的线程解除堵塞时,内核自动会将信号量的计数减1。在.NET下通过Semaphore类来实现信号量同步。 Semaph 阅读全文
posted @ 2019-12-10 23:39 缥缈的尘埃 阅读(907) 评论(0) 推荐(0)
摘要:前面讲的线程同步主要是用户模式的(CLR Via C# 一书中是这么定义的,书中说到线程同步分两种:一、用户模式构造 二、内核模式构造),对于内核模式构造(指的的是构造操作系内核对象),我们使用.NET Framework中的类如AutoResetEvent、Semaphore中方法来实现线程同步, 阅读全文
posted @ 2019-12-08 01:58 缥缈的尘埃 阅读(826) 评论(0) 推荐(0)
摘要:一、线程同步概述 创建多线程来实现让我们能够更好地响应应用程序,然而当我们创建了多个线程时,就存在多个线程同时访问一个共享资源的情况。此时,我们就需要用到线程同步,线程同步可以防止数据(共享资源)的损坏。 一般来说,设计应用程序应尽量避免使用线程同步, 因为线程同步会产生一些问题: 1)它的使用比较 阅读全文
posted @ 2019-12-06 16:21 缥缈的尘埃 阅读(647) 评论(0) 推荐(0)
摘要:一、I/O线程实现对文件的异步 1.1、I/O线程介绍 对于线程所执行的任务来说,可以把线程分为两种类型:工作者线程和I/O线程。 • 工作者线程用来完成一些计算的任务,在任务执行的过程中,需要CPU不间断地处理,所以,在工作者线程的执行过程中,CPU和线程的资源是充分利用的。 • I/O线程主要用 阅读全文
posted @ 2019-12-05 14:59 缥缈的尘埃 阅读(1831) 评论(1) 推荐(0)
摘要:一、线程池基础 首先,创建和销毁线程是一个要耗费大量时间的过程,其次,太多的线程也会浪费内存资源,所以通过Thread类来创建过多的线程反而有损于性能。为了改善这样的问题 ,.NET中就引入了线程池。 线程池形象的表示就是存放应用程序中使用的线程的一个集合(就是放线程的地方,这样线程都放在一个地方就 阅读全文
posted @ 2019-12-04 16:41 缥缈的尘埃 阅读(1048) 评论(0) 推荐(0)
摘要:一、线程的介绍 进程(Process)是应用程序的实例要使用的资源的一个集合,每个应用程序都在各自的进程中运行来确保应用程序不受其他应用程序的影响。 线程是进程中基本执行单元, 一个进程中可以包含多个线程。在进程入口执行的第一个线程是一个进程的主线程,在.NET应用程序中,都是以Main()方法作为 阅读全文
posted @ 2019-11-28 01:40 缥缈的尘埃 阅读(1520) 评论(0) 推荐(0)
摘要:反射有个典型的应用,就是菜单的动态加载,原理就是通过反射调用某个窗体(类)。下面演示一下通过反射调用类及方法: 1、新建一个类,命名为:ReflectionHelper,代码如下: #region 创建对象实例 /// <summary> /// 创建对象实例 /// </summary> /// 阅读全文
posted @ 2019-11-18 11:32 缥缈的尘埃 阅读(8967) 评论(0) 推荐(1)
摘要:C#扩展方法,简单的理解是不修改原来类的源代码的情况下,为某个类添加某个方法。扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this修饰符为前缀。 有一个典型的应用场景,就是程序二开。比如别人的DLL不公开源代码,要想在DLL某 阅读全文
posted @ 2019-11-17 16:58 缥缈的尘埃 阅读(796) 评论(0) 推荐(1)
摘要:关于String为值类型还是引用类型的讨论一直没有平息,最近一直在研究性能方面的问题,今天再次将此问题进行一次明确。希望能给大家带来点帮助,如果有错误请指出。 来看下面例子: //值类型 int a = 1; int b = a; a = 2; Console.WriteLine("a is {0} 阅读全文
posted @ 2019-11-07 10:46 缥缈的尘埃 阅读(3264) 评论(1) 推荐(0)
摘要:每次调试都会出现"仅我的代码"警告,特别的烦人,取消方法如下: 1、点击工具,选择选项。 2、选择调试→常规,取消“启动时若没有用户代码则发出警告(仅限托管)”选项。 阅读全文
posted @ 2017-10-02 02:03 缥缈的尘埃 阅读(1630) 评论(0) 推荐(0)
摘要:IDE升级到VS2017之后,出现了如题所示的报错,重新引用DLL的方法如下: 1、右键引用,选择添加引用。 2、左侧选择浏览,下面点击浏览按钮。 3、分别添加Microsoft.ReportViewer.Common.DLL及Microsoft.ReportViewer.WinForms.DLL两 阅读全文
posted @ 2017-10-02 01:54 缥缈的尘埃 阅读(8383) 评论(0) 推荐(0)
摘要:VS2017使用时,按F1出来在线英文帮助,可以稍作改动,出来中文帮助。 1、进入安装文件,选择单个组件,勾选Help Viewer。 2、安装完成后,在IDE中选择在线查看器中启动。 阅读全文
posted @ 2017-09-28 09:59 缥缈的尘埃 阅读(1023) 评论(0) 推荐(0)