随笔分类 -  C#

从匿名方法到LINQ 学习笔记
摘要:匿名方法->Lambda表达式->LINQ,每种技术似乎都是有源头的哦。在 2.0 之前的 C# 版本中,声明委托的唯一方法是使用命名方法。C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式。有一种情况下,匿名方法提供了 Lambda 表达式中所没有的功能。匿名方法使您能够省略参数列表,这意味着可以将匿名方法转换为带有各种签名的委托。这对于 Lambda 表达式来说是不可能的,Lambda表达式加上扩展方法就成了LINQ匿名方法:没有匿名方法的时候(C# 1.0): addButton.Click += n 阅读全文
posted @ 2011-08-20 16:01 Melou 阅读(661) 评论(1) 推荐(1) 编辑
基于事件的异步设计模式
摘要:那些同时执行多项任务、但仍能响应用户交互的应用程序通常需要实施一种使用多线程的设计方案。.NET Framewrok 类库System.Threading 命名空间中提供了创建高性能多线程应用程序所必需的所有工具,但要想有效地使用这些工具,需要有丰富的使用多线程软件工程的经验。对于相对简单的多线程应用程序,BackgroundWorker 组件提供了一个简单的解决方案。对于更复杂的异步应用程序,就... 阅读全文
posted @ 2011-01-09 11:01 Melou 阅读(1684) 评论(2) 推荐(1) 编辑
.NET多线程编程
摘要:线程的基本概念• 线程是程序执行的基本原子单位. 一个进程可以由多个线程组成. • 每个线程都维护异常处理程序、调度优先级和一组系统用于在调度该线程前保存线程上下文的结构。线程上下文包括为使线程在线程的宿主进程地址空间中无缝地继续执行所需的所有信息,包括线程的CPU 寄存器组和堆栈。 • 在分布式编程中,正确使用线程能够很好的提高应用程序的性能及运行效率.实现原理是将一个进程分成多个线程,然后让它们并发异步执行,来提高运行效率. • 并发执行并不是同时执行(占有CPU),任意时刻还是只能有一个线程占用CPU,只不过是它们争夺CPU频繁一些,感觉到他们似乎都在运行. 什么时候用线程?• 一般情况 阅读全文
posted @ 2011-01-03 17:37 Melou 阅读(2614) 评论(0) 推荐(2) 编辑
C# Action<T> 委托
摘要:在使用 ActionT 委托时,不必显式定义一个封装只有一个参数的方法的委托。以下代码显式声明了一个名为 DisplayMessage 的委托,并将对 WriteLine 方法或 ShowWindowsMessage 方法的引用分配给其委托实例。 以下简化了此代码,它所用的方法是实例化 ActionT 委托,而不是显式定义一个新委托并将命名方法分配给该委托。也可以将 ActionT 委托与匿名方法一起使用。 也可以将 lambda 表达式分配给 ActionT 委托实例。下面使用 ActionT 委托来打印 ListT 对象的内容。 使用 Print 方法将列表的内容 阅读全文
posted @ 2011-01-01 21:34 Melou 阅读(34968) 评论(10) 推荐(8) 编辑
C# 引用参数
摘要:最近经常和同事讨论引用参数的问题,为了搞清楚,查了些资料,其中CLR via C#中讲的比较清楚,整理了下----摘自(CLR via C#) 在默认情况下,CLR假设所有的方法参数都是按值传递的。当参数为引用类型的对象时,参数的传递时通过传递指向对象的引用来完成的(引用本身是按值传递的)。这意味着方法可以改变引用对象,并且调用代码可以看到这种改变的结果。 对于一个方法,我们必须知道它的每个参数是引用类型参数,还是值类型的参数,因为我们编写的操作参数的代码会因此有很大的差别。 除了按值传递参数外,CLR还允许我们按引用的方式来才传递参数。在C#中,我们可以用out和ref关键字来做到这一点。这 阅读全文
posted @ 2010-12-19 11:01 Melou 阅读(4116) 评论(0) 推荐(2) 编辑
将DataSet导入到Excel的多个Sheet中
摘要:参考MSDN文章:如何:使用 COM Interop 创建 Excel 电子表格(C# 编程指南)如何: 使用 Visual C#.net Excel 的句柄的事件代码: 阅读全文
posted @ 2010-11-28 21:16 Melou 阅读(1018) 评论(0) 推荐(0) 编辑
C# 异步编程 结束异步调用
摘要:在使用 BeginInvoke 和 EndInvoke 进行异步调用时,调用 BeginInvoke 之后,可以执行下列操作来结束异步调用: · 进行某些操作,然后调用 EndInvoke 一直阻止到调用完成。 · 使用 IAsyncResult..::.AsyncWaitHandle 属性获取 WaitHandle,使用它的 WaitOne 方法一直阻止执行直到发出 WaitHandle 信... 阅读全文
posted @ 2010-10-01 08:48 Melou 阅读(4270) 评论(0) 推荐(0) 编辑
C# 异步编程 异步委托调用同步方法
摘要:同步化操作:由前后紧接的组件或函数调用组成。一个同步化调用会阻塞整个进程直到这一个操作完成。异步化操作:不会阻塞启动操作的调用线程。调用程序必须通过轮流检测、软件中的中断信号或只是明确地等待完成信号来发现调用的完成。.NET 为异步操作提供两种设计模式:· 使用 IAsyncResult 对象的异步操作。 · 使用事件的异步操作。 .NET的许多方面都支持异步编程功能,... 阅读全文
posted @ 2010-07-18 19:27 Melou 阅读(2292) 评论(4) 推荐(1) 编辑
设计模式学习之路——Builder 生成器模式
摘要:生成器模式有点类似于抽象工厂模式,两者都返回由许多方法和对象组成的类。它们之间的主要差别是,抽象工厂返回的是一系列相关的类,而生成器是根据提供给它的数据一步一步地构建一个复杂的对象。 动机:在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相... 阅读全文
posted @ 2010-06-19 19:20 Melou 阅读(421) 评论(0) 推荐(0) 编辑
设计模式学习之路——Observer 观察者模式
摘要:观察者模式的效果 Observer促进了目标的抽象耦合,目标不知道任何一个观察者的详细内容。但这也具有潜在的缺点:当目标中的数据发生了一系列的递增变化时,要持续或反复地更新观察者。如果更新的代价很高,就有必要引进某种管理更改的策略,这样就不会多次或频繁地通知观察者。 当一个客户(观察者)对底层数据做了修改,你要决定由哪一个对象去触发送给其他观察者的更新通知。如果是由目标在它被更改后去通知所有的观... 阅读全文
posted @ 2010-06-17 18:30 Melou 阅读(616) 评论(1) 推荐(0) 编辑
设计模式学习之路——Abstract Factory 抽象工厂模式
摘要:所有的创建型模式都涉及到创建对象实例的方式,因为程序不应该依赖于对象如何创建和安排,当然,使用new 是C#创建一个对象实例最简单的方法。然而,很多情况下,创建对象的本意随程序的需求不同而不同,将创建过程抽象成一个专门的“创造器”类,会使程序更灵活,更通用。 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 动机:在软件系统中,经常面临着&ldquo... 阅读全文
posted @ 2010-06-17 12:56 Melou 阅读(429) 评论(1) 推荐(0) 编辑
设计模式学习之路——Strategy 策略模式
摘要:1. 意图定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 2. 动机在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。 如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题? 如果一个程序需要一种特定的服... 阅读全文
posted @ 2010-06-10 21:19 Melou 阅读(503) 评论(0) 推荐(0) 编辑
设计模式学习之路——Singleton 单件模式
摘要:在程序设计过程中,有很多情况需要保证一个类只有一个实例.这时候就需要使用单件模式了。 保证一个类仅有一个实例,并提供一个该实例的全局访问点。——《设计模式》GoF 结构(Struct) 1 使用静态方法创建单件 让一个类只有一个实例,最容易的方法是在类中嵌入一个静态变量,并在第一个类实例中设置该变量 阅读全文
posted @ 2010-06-02 21:06 Melou 阅读(522) 评论(4) 推荐(0) 编辑