shaneplot

2010年5月4日 #

(转)HeadFirst设计模式学习笔记(C#版):鸭子与策略(Strategy)模式

摘要: 策略模式的设计原则如下: 1. 将应用中需要经常变化的代码独立出来,应和那些不需要经常变化的代码分开。 2. 应针对接口,而不是类进行编程。 3. 在类中应多用组合,少用继承。 例子: 我们要实现一个鸭子模拟器,这个鸭子模拟器由Duck类描述,而Duck类有如下4个行为: 1. display 2. swim 3. fly(飞) 4. quack(叫) 其中swim是所有鸭子都具有的特性,而且所有鸭子的这些特性都相同,因此,这个方法可以直接在Duck类中实现。display方法也是所有鸭子具有的特性,但随着鸭子的种类不同,display也有所不同,因此,display方法应为Duck类的抽象方 阅读全文

posted @ 2010-05-04 15:16 shanechow 阅读(281) 评论(0) 推荐(0) 编辑

(转)C#线程系列讲座(5):同步技术之Monitor

摘要: 在上一讲介绍了使用lock来实现线程之间的同步。实际上,这个lock是C#的一个障眼法,在C#编译器编译lock语句时,将其编译成了调用Monitor类。先看看下面的C#源代码:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->publicstaticvoidMyLock(){lock(typeof(Program)){}} 上面的代码通过lock语句使MyLock同步,这个方法被编译成IL后,代码如图1所示。 图1 从上图被标注的区域可以看到 阅读全文

posted @ 2010-05-04 14:57 shanechow 阅读(247) 评论(0) 推荐(0) 编辑

(转)C#线程系列讲座(4):同步与死锁

摘要: 虽然线程可以在一定程度上提高程序运行的效率,但也会产生一些副作用。让我们先看看如下的代码:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->classIncrement{privateintn=0;privateintmax;publicIncrement(intmax){this.max=max;}publicintresult{get{returnn;}set{n=value;}}publicvoidInc(){for(inti=0;i&l 阅读全文

posted @ 2010-05-04 14:40 shanechow 阅读(215) 评论(0) 推荐(0) 编辑

(转)C#线程系列讲座(3):线程池和文件下载服务器

摘要: 如果设计一个服务器程序,每当处理用户请求时,都开始一个线程,将会在一定程序上消耗服务器的资源。为此,一个最好的解决方法就是在服务器启动之前,事先创建一些线程对象,然后,当处理客户端请求时,就从这些建好的线程中获得线程对象,并处理请求。保存这些线程对象的结构就叫做线程池。 在C#中可以通过System.Threading.ThreadPool类来实现,在默认情况下,ThreadPool最大可建立500个工作线程和1000个I/O线程(根据机器CPU个数和.net framework版本的不同,这些数据可能会有变化)。下面是一个用C#从线程池获得线程的例子:Code highlighting pr 阅读全文

posted @ 2010-05-04 10:04 shanechow 阅读(255) 评论(0) 推荐(0) 编辑

(转)C#线程系列讲座(2):Thread类的应用

摘要: 一、 Thread类的基本用法通过System.Threading.Thread类可以开始新的线程,并在线程堆栈中运行静态或实例方法。可以通过Thread类的的构造方法传递一个无参数,并且不返回值(返回void)的委托(ThreadStart),这个委托的定义如下:[ComVisibleAttribute(true)]public delegate void ThreadStart()我们可以通过如下的方法来建立并运行一个线程。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighl 阅读全文

posted @ 2010-05-04 09:29 shanechow 阅读(297) 评论(0) 推荐(0) 编辑

C#委托的异步调用

摘要: 本文将主要通过“同步调用”、“异步调用”、“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊。首先,通过代码定义一个委托和下面三个示例将要调用的方法:/*添加的命名空间usingSystem.Threading;usingSystem.Runtime.Remoting.Messaging;*/ publicdelegateintAddHandler(inta,intb);publicclass加法类{publicstaticintAdd(inta,intb){Console.WriteLine("开始计算:"+a+"+"+b);T 阅读全文

posted @ 2010-05-04 09:05 shanechow 阅读(1227) 评论(2) 推荐(0) 编辑

(转)C#线程系列讲座(1):BeginInvoke和EndInvoke方法

摘要: 开发语言:C#3.0IDE:Visual Studio 2008本系列教程主要包括如下内容:1. BeginInvoke和EndInvoke方法2. Thread类3. 线程池4. 线程同步基础5. 死锁6. 线程同步的7种方法7. 如何在线程中访问GUI组件一、线程概述在操作系统中一个进程至少要包含一个线程,然后,在某些时候需要在同一个进程中同时执行多项任务,或是为了提供程序的性能,将要执行的任务分解成多个子任务执行。这就需要在同一个进程中开启多个线程。我们使用C#编写一个应用程序(控制台或桌面程序都可以),然后运行这个程序,并打开windows任务管理器,这时我们就会看到这个应用程序中所含 阅读全文

posted @ 2010-05-04 08:50 shanechow 阅读(433) 评论(0) 推荐(0) 编辑

导航