06 2012 档案

摘要:引言如果你看过了C#中的委托和事件一文,我想你对委托和事件已经有了一个基本的认识。但那些远不是委托和事件的全部内容,还有很多的地方没有涉及。本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器、异常处理、超时处理和异步方法调用等内容。为什么要使用事件而不是委托变量?在C#中的委托和事件中,我提出了两个为什么在类型中使用事件向外部提供方法注册,而不是直接使用委托变量的原因。主要是从封装性和易用性上去考虑,但是还漏掉了一点,事件应该由事件发布者触发,而不应该由客户端(客户程序)来触发。这句话是什么意思呢?请看下面的范例:NOTE:注意这里术语的变化,当我们单独谈论事件, 阅读全文
posted @ 2012-06-27 15:55 猛龍過江 阅读(236) 评论(0) 推荐(0)
摘要:引言委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。将方法作为方法的参数我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输出一句问 阅读全文
posted @ 2012-06-27 15:54 猛龍過江 阅读(292) 评论(0) 推荐(0)
摘要:C#支持单继承,说到继承就不得不说new,virtual和override这三个关键词,灵活正确的使用这三个关键词,可以使程序结构更加清晰,代码重用性更高。 以下是msdn中对new,virtual和override的定义: 使用 new 修饰符显式隐藏从基类继承的成员。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。virtual 关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它 阅读全文
posted @ 2012-06-27 10:00 猛龍過江 阅读(335) 评论(0) 推荐(0)
摘要:测试杀毒软件是否有效的最简单和安全的方法欧洲反病毒发展研究所(EICAR)提供了一个文件:EICAR标准反病毒测试文件,它是反病毒软件厂商在全世界范围内提供的用来检查反病毒软件安装的一个测试标准。你可以轻易地建立这个文件:请打开“记事本”,将下面一行文本拷贝进去,保存文件,文件类型选择“所有文件”,文件名为“EICAR.COM”。X5O!P%@AP[4/PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*拷贝成功后,产生的文件应该有69或70个字节长。现在你可以用你的杀毒软件来查这个文件,如果报告发现病毒(实际上这个文件只是测试用的, 阅读全文
posted @ 2012-06-25 16:56 猛龍過江 阅读(340) 评论(0) 推荐(0)
摘要:Lambda Expressions in LINQ在第12章,我提到可以用lambda表达式定义内联的委托定义。在如下表达式中:customer => customer.FirstName == "Donna"左边的操作数,customer,是输入参数。右边的操作数是lambda表达式,检查客户的名字属性是否等于"Donna"。因此,对于给定的客户对象,你再检查它的名字是否为Donna。这个lambda表达式会被传入Where方法并对在客户列表中的每一个客户执行这个比较操作。使用扩展方法定义的查询被称为基于方法的查询(method-based q 阅读全文
posted @ 2012-06-21 10:25 猛龍過江 阅读(343) 评论(0) 推荐(0)
摘要:Lambda Expressions in LINQ在第12章,我提到可以用lambda表达式定义内联的委托定义。在如下表达式中:customer => customer.FirstName == "Donna"左边的操作数,customer,是输入参数。右边的操作数是lambda表达式,检查客户的名字属性是否等于"Donna"。因此,对于给定的客户对象,你再检查它的名字是否为Donna。这个lambda表达式会被传入Where方法并对在客户列表中的每一个客户执行这个比较操作。使用扩展方法定义的查询被称为基于方法的查询(method-based q 阅读全文
posted @ 2012-06-21 10:24 猛龍過江 阅读(2381) 评论(0) 推荐(0)
摘要:C# Lambda Expressions是什么呢?我们在处理数据库数据删除的操作的时候会碰到它,那么具体的C# Lambda Expressions是什么以及含义和使用是什么情况呢?那么下面我来看看具体的内容。1.关于C# Lambda Expressions:一个Lambda Expression (译为Lambda式) 就是一个包含若干表达式和语句的匿名函数。可以被用作创建委托对象或表达式树类型。所有的Lambda式都使用操作符“=>“,表示“goes to (转变为)”。操作符左边部分是输入参数表,右边部分是表达式或语句块。x => x * x 读成“x转变为x 乘x”。L 阅读全文
posted @ 2012-06-21 10:20 猛龍過江 阅读(7903) 评论(1) 推荐(2)
摘要:当你听说Linq给你的承诺时,你怎么想的?Wow,我们可以以统一的方式操作各种各样的数据了。这就是我当时的想法。虽然人们在现实中总是喜欢差异,认为差异才能产生美,如果一切的一切都是一样的,这个世界将无比的单调,可是作为程序员的我们却对标准趋之若鹜,对差异嫉恶如仇。看同桌的你是不是正在为了Oracle和Sql Server两种数据库编写两套数据访问的类?表达式树概念Linq的承诺貌似Java那个梦想一样:Write Once,Run Anywhere。Java是怎么做到的?Sun等公司为我们在各种平台架构上实现了各自的虚拟机,Java的编译分为两个阶段,第一阶段将Java代码编译为字节码,在这个 阅读全文
posted @ 2012-06-21 10:19 猛龍過江 阅读(838) 评论(0) 推荐(0)
摘要:http://www.cnblogs.com/ldp615/archive/2009/08/07/1541404.html 阅读全文
posted @ 2012-06-20 14:28 猛龍過江 阅读(156) 评论(0) 推荐(0)
摘要:IntroductionIt is normal practice to open the Windows command prompt and execute commands. The command when executed shows the result onto the screen. There are many commands that we execute daily such as dir, find, etc. A situation may arise when you want to execute a (shell) command from the C# ap 阅读全文
posted @ 2012-06-12 10:00 猛龍過江 阅读(543) 评论(0) 推荐(0)
摘要:http://www.cnblogs.com/light169/archive/2007/03/25/686978.html 阅读全文
posted @ 2012-06-11 11:16 猛龍過江 阅读(191) 评论(0) 推荐(0)
摘要:BrowsableAttribute:描述是否一个属性或事件应该被显示在属性浏览器里。 CategoryAttribute:描述一个属性或事件的类别,当使用类别的时候,属性浏览器按类别将属性分组。 DescriptionAttribute:当用户在属性浏览器里选择属性的时候,description里指定的文本会显示在属性浏览器的下边,向用户显示属性的功能。 DefaultPropertyAttribute:为组件指定一个默认的属性,当用户在Form设计器上选择一个控件的时候,默认属性会在属性浏览器里被选中。 DefaultValueAttribute:为一个简单类型的属性设置一个默认值。 De 阅读全文
posted @ 2012-06-11 09:18 猛龍過江 阅读(143) 评论(0) 推荐(0)
摘要:前面说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生。C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。在C#中,关键字lock定义如下:lock(expression) statement_blockexpression代表你希望跟踪的对象,通常是对象引用。如果你想保护一个类的实例,一般地,你可以使用this;如果你想保护一个静态变量(如互斥 阅读全文
posted @ 2012-06-08 13:20 猛龍過江 阅读(191) 评论(0) 推荐(0)
摘要:如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对象,即:System.Threading 命名空间中的 Mutex 类。我们可以把Mutex看作一个出租车,乘客看作线程。乘客首先等车,然后上车,最后下车。当一个乘客在车上时,其他乘客就只有等他下车以后才可以上 车。而线程与Mutex对象的关系也正是如此,线程使用Mutex.WaitOne()方法等待Mutex对象被释放,如果它等待的Mutex对象被释放 了,它就自动拥有这个对象,直到它调用Mutex.ReleaseMutex()方法释放这个对象,而在此期间,其他想要获取这个Mutex对象的线程都 只有等待。下面这个例子使用了 阅读全文
posted @ 2012-06-08 13:19 猛龍過江 阅读(725) 评论(0) 推荐(0)
摘要:Timer类:设置一个定时器,定时执行用户指定的函数。定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数。初始化一个Timer对象:Timer timer = new Timer(timerDelegate, s,1000, 1000);// 第一个参数:指定了TimerCallback 委托,表示要执行的方法;// 第二个参数:一个包含回调方法要使用的信息的对象,或者为空引用;// 第三个参数:延迟时间——计时开始的时刻距现在的时间,单位是毫秒,指定为“0”表示立即启动计时器;// 第四个参数:定时器的时间间隔——计时开始以后,每隔这么长的一段时间,TimerCallback所代表 阅读全文
posted @ 2012-06-08 13:18 猛龍過江 阅读(212) 评论(0) 推荐(0)
摘要:在多线程的程序中,经常会出现两种情况:一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应这一般使用ThreadPool(线程池)来解决;另一种情况:线程平时都处于休眠状态,只是周期性地被唤醒这一般使用Timer(定时器)来解决;ThreadPool类提供一个由系统维护的线程池(可以看作一个线程的容器),该容器需要 Windows 2000 以上系统支持,因为其中某些方法调用了只有高版本的Windows才有的API函数。将线程安放在线程池里,需使用ThreadPool.QueueUserWorkItem()方法,该方法的原型如下://将一个线程放进线程池 阅读全文
posted @ 2012-06-08 13:17 猛龍過江 阅读(325) 评论(0) 推荐(0)
摘要:http://kb.cnblogs.com/page/42528/ 阅读全文
posted @ 2012-06-08 11:30 猛龍過江 阅读(97) 评论(0) 推荐(0)
摘要:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://zhoufoxcn.blog.51cto.com/792419/262608多线程编程(2):线程的同步在《多线程编程》系列第一篇讲述了如何启动线程,这篇讲述线程之间存在竞争时如何确保同步并且不发生死锁。线程不同步引出的问题下面做一个假设,假设有100张票,由两个线程来实现一个售票程序,每次线程运行时首先检查是否还有票未售出,如果有就按照票号从小到大的顺序售出票号最小的票,程序的代码如下:using System; using System.Collections.Generi 阅读全文
posted @ 2012-06-08 10:13 猛龍過江 阅读(307) 评论(0) 推荐(0)
摘要:codemaid是一个很好用的代码格式化工具是vs2010的插件 在扩展管理器里面搜索就可以我最常用的功能就是cleanup 把多余的空行去掉看着舒服Indent GuidesProductivity Power Tools 阅读全文
posted @ 2012-06-06 17:19 猛龍過江 阅读(237) 评论(0) 推荐(0)
摘要:NET中各种线程同步方法在NET多线程开发中,有时候需要多个线程协调工作,完成这个步骤的过程称为“同步”。使用同步的主要原因:1.多个线程访问同一个共享资源。2.多线程写入文件时保证只有一个线程使用文件资源。 3.由事件引发线程,线程等待事件,需要挂起线程。NET中线程同步常见的几种方法:1.locklock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。lock的优点:简单易用,对象的同步几乎透明,轻量级。使用lock需要注意:锁定的对于应该是私有的,如果是公有的对象,可能出现超出控制范围的其它代码锁定 阅读全文
posted @ 2012-06-06 15:55 猛龍過江 阅读(359) 评论(0) 推荐(0)