09 2011 档案
安装中文VS2008 SP1 和.NETFRAMEWORK 3.5SP1后智能提示是英文的解决办法
摘要:期待已久的VS2008 SP1 和.NET FRAMEWORK 3.5 SP1都出来了 下载地址 Microsoft Visual Studio 2008 Service Pack 1 (iso) http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61 Visual Studio 2008 Team Foundation Server Service Pack 1(iso) http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9e40a5b6-da41-43a2-a06d-3cee196bfe3d Microsoft .NET Framework 3.5 Service Pack 1 阅读全文
posted @ 2011-09-29 22:23 上校 阅读(190) 评论(0) 推荐(0) 编辑
Dictionary字典集合的使用
摘要:Dictionary dic = new Dictionary(); foreach (DataRow r in dt.Rows) { string str = Convert.ToString(r["strLogisticsType"]); if (dic.ContainsKey(str)) { continue; } dic.Add(str,str); } 阅读全文
posted @ 2011-09-29 14:34 上校 阅读(286) 评论(0) 推荐(1) 编辑
ORM
摘要: 阅读全文
posted @ 2011-09-27 23:49 上校 阅读(142) 评论(0) 推荐(0) 编辑
Net设计模式实例之访问者模式(Visitor Pattern)
摘要:一、访问者模式简介(Brief Introduction) 表示一个作用于某对象结构中的元素操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作,它把数据结构和作用于结构上的操作之间的耦合性解脱开,使的操作结合可以相对自由地演化。优点是增加新的操作很容易,因为增加一个新的操作就意味着增加一个新的访问者,访问者模式将有关的行为集中到一个访问对象中。 二、解决的问题(What To Solve) 访问者模式的目的是要把处理从数据结构分离出来。如果系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式是个不错的选择,因为访问者模式使的算法操作的增加变的容易。相反,如果系统的数据结构不稳定,易于变化,则此系统就不适合使用访问者模式了。 阅读全文
posted @ 2011-09-27 01:35 上校 阅读(251) 评论(0) 推荐(0) 编辑
Net设计模式实例之解释器模式(Interpreter Pattern)
摘要:一、解释器模式简介(Brief Introduction) 解释器模式(Interpreter Pattern),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。使用了解释器模式,可以很容易地改变和扩展文法,因为该模式使用类来表示文法规则,可以使用继承来改变或扩展该文法。也比较容易实现文法,因为定义抽象语法树中各个节点的类的实现大体类似,这些类容易直接编写。 二、解决的问题(What To Solve) 如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子,这样就可以构建一个解释器,该解释器通过解释这些句子来解决问题。 阅读全文
posted @ 2011-09-26 22:58 上校 阅读(273) 评论(0) 推荐(0) 编辑
.NET设计模式(13):享元模式(Flyweight Pattern)
摘要:享元模式(Flyweight Pattern) ——.NET设计模式系列之十三 摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作? 本文试图通过一个简单的字符处理的例子,运用重构的手段,一步步带你走进Flyweight模式,在这个过程中我们一同思考、探索、权衡,通过比较而得出好的实现方式,而不是给你最终的一个完美解决方案。 阅读全文
posted @ 2011-09-25 23:06 上校 阅读(226) 评论(0) 推荐(0) 编辑
.NET设计模式(20):中介者模式(Mediator pattern)
摘要:一、引子   中介在现实生活中并不陌生,满大街的房屋中介、良莠不齐的出国中介……。它们的存在是因为它们能给我们的生活带来一些便利:租房、买房用不着各个小区里瞎转;出国留学也不用不知所措。   中介者模式在程序设计中也起到了类似的作用。   二、定义与结构   GOF给中介者模式下的定义是:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“中介”对象,使得两头的对象分别和“中介”对象引用或者依赖。   当然并不是所有的对象都需要加入“中介”对象。如果对象之间的关系原本一目了然,中介对象的加入便是“画蛇添足”。   来看下中介者模式的组成部分吧。 阅读全文
posted @ 2011-09-25 21:51 上校 阅读(286) 评论(0) 推荐(0) 编辑
职责链模式在开发中的应用
摘要:我在《软件设计精要与模式》第19章中介绍了职责链模式在实际项目中的应用,由于引入了该模式,使得对象在职责划分上有了更清晰的结构,然而由于项目场景的诸多限制,总有几分“为模式而模式”的生涩感觉。最近在开发WCF的相关项目时,又一次应用了职责链模式,一方面加深了自己对设计模式的进一步理解,也积累了一些心得,可以与各位分享。 在该项目中,我希望实现对Endpoint的合法性检验,其中对于绑定而言,则包含了许多约束,例如绑定与URI样式的约束,例如绑定与服务契约设计的约束。绑定不同,则向对应的约束也不相同。为了更好地体现Endpoint,我在项目中定义了属于自己的Endpoint类: 阅读全文
posted @ 2011-09-25 19:48 上校 阅读(255) 评论(0) 推荐(0) 编辑
.NET设计模式(17):命令模式(Command Pattern)
摘要:命令模式(Command Pattern) ——.NET设计模式系列之十七 概述 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合[李建忠]。这就是本文要说的Command模式。 意图 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。[GOF 《设计模式》] 阅读全文
posted @ 2011-09-24 23:53 上校 阅读(446) 评论(0) 推荐(0) 编辑
.NET设计模式(9):桥接模式(Bridge Pattern)
摘要:桥接模式(Bridge Pattern) 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。 意图 将抽象部分与实现部分分离,使它们都可以独立的变化。[GOF 《设计模式》] 阅读全文
posted @ 2011-09-24 22:07 上校 阅读(342) 评论(0) 推荐(0) 编辑
.NET设计模式(2):单件模式(Singleton Pattern)
摘要:单件模式(Singleton Pattern) 概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。 从另一个角度来说,Singleton模式其实也是一种职责型模式。因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责! 阅读全文
posted @ 2011-09-24 20:46 上校 阅读(287) 评论(0) 推荐(0) 编辑
.NET设计模式(18):迭代器模式(Iterator Pattern)
摘要:概述 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。 意图 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。[GOF 《设计模式》] 阅读全文
posted @ 2011-09-24 16:45 上校 阅读(271) 评论(2) 推荐(1) 编辑
.NET设计模式(11):组合模式(Composite Pattern)
摘要:组合模式(Composite Pattern) 概述 组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 意图 将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。[GOF 《设计模式》] 阅读全文
posted @ 2011-09-24 15:25 上校 阅读(258) 评论(0) 推荐(0) 编辑
抽象类与接口的理解,详细易懂
摘要:一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。 阅读全文
posted @ 2011-09-24 11:27 上校 阅读(1149) 评论(0) 推荐(0) 编辑
Net设计模式实例之备忘录模式(Memento Pattern)
摘要:一、备忘录模式简介(Brief Introduction) 备忘录模式(Memento Pattern),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以就该对象恢复到原先保存的状态。 二、解决的问题(What To Solve) 当系统功能比较复杂,而且需要记录历史属性以便当需要时做恢复动作。Originator可以根据保存的Memento信息还原到前一状态。 三、备忘录模式分析(Analysis) 阅读全文
posted @ 2011-09-24 01:06 上校 阅读(331) 评论(0) 推荐(0) 编辑
js对数字格式化
摘要:在js中---------- Javascript也提供了对数字进行格式化输出的支持 Number对象提供的几种格式化函数: toExponential([fractionDigits]) :将数字按科学计数法格式返回,其中的fractionDigits值小数点后保留的位数。 toFixed([fractionDigits]) :将数字按指定的小数点位数返回,其中的fractionDigits值小数点后保留的位数。 toPrecision([precision]) :将数字按指定的精度返回(这个精度不是指小数点后几位),其中precision是指定的精度值 阅读全文
posted @ 2011-09-23 11:55 上校 阅读(667) 评论(0) 推荐(0) 编辑
.NET设计模式(8):适配器模式(Adapter Pattern)
摘要:适配器模式(Adapter Pattern) ——.NET设计模式系列之八 概述 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。那么如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?这就是本文要说的Adapter 模式。 阅读全文
posted @ 2011-09-23 01:20 上校 阅读(242) 评论(0) 推荐(0) 编辑
Net设计模式实例之状态模式(State Pattern)
摘要:一、状态模式简介(Brief Introduction) 状态模式(State Pattern),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 二、解决的问题(What To Solve) 状态模式主要解决的是当控制一个对象状态装换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。 当一个对象行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。 阅读全文
posted @ 2011-09-23 00:59 上校 阅读(272) 评论(0) 推荐(0) 编辑
.NET设计模式(19):观察者模式(Observer Pattern)
摘要:概述 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。 阅读全文
posted @ 2011-09-21 22:53 上校 阅读(222) 评论(0) 推荐(0) 编辑
.NET设计模式(4):建造者模式(Builder Pattern)
摘要:建造者模式(Builder Pattern) 概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。 阅读全文
posted @ 2011-09-20 23:27 上校 阅读(272) 评论(0) 推荐(0) 编辑
.NET设计模式(12):外观模式(Façade Pattern)
摘要:外观模式(Façade Pattern) ——.NET设计模式系列之十二 概述 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Façade 模式。 阅读全文
posted @ 2011-09-20 21:15 上校 阅读(280) 评论(0) 推荐(0) 编辑
.NET设计模式(16):模版方法(Template Method)
摘要:摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要。 主要内容 1.概述 2.Template Method解说 3..NET中的Template Method模式 4.适用性及实现要点 阅读全文
posted @ 2011-09-19 23:34 上校 阅读(233) 评论(0) 推荐(0) 编辑
通过序列化实现深拷贝
摘要:using System; using System.Collections.Generic; using System.Linq; using System.Text; class App { public static void Main(string[] args) { abc abc1 = new abc(); abc1.a = "a"; abc1.b = "b"; abc1.c = "c"; MemoryStream memoryStream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(memoryStream, abc1); 阅读全文
posted @ 2011-09-19 22:09 上校 阅读(220) 评论(0) 推荐(0) 编辑
.NET设计模式(6):原型模式(Prototype Pattern)
摘要:原型模式(Prototype Pattern) ——.NET设计模式系列之六 概述 在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构。这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适。那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化? 阅读全文
posted @ 2011-09-19 00:56 上校 阅读(264) 评论(0) 推荐(0) 编辑
工厂方法模式(Factory Method)
摘要:工厂方法模式(Factory Method) ——.NET设计模式系列之五 概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的Factory Method模式了。 阅读全文
posted @ 2011-09-18 20:20 上校 阅读(414) 评论(0) 推荐(0) 编辑
代理模式
摘要:摘要:在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切。这就是本文要说的Proxy模式。 主要内容 1.例说Proxy模式 2.Proxy模式效果及实现要点 阅读全文
posted @ 2011-09-18 11:12 上校 阅读(208) 评论(0) 推荐(0) 编辑
装饰模式
摘要:“装饰模式(Decorator)”又名“包装模式(Wrapper)”,通常用来灵活地扩充对象的功能。 在此之前我们可以通过类的继承来扩充父类的功能,但这种继承方式缺乏灵活性,并且会导到子类数量的快速膨胀。恰当地使用装饰模式我们会轻松实现在控制子类数量的基础上,灵活地实现对象功能的扩展。装饰模式比类的继承更灵活。 阅读全文
posted @ 2011-09-18 00:26 上校 阅读(408) 评论(1) 推荐(0) 编辑
.net3.5新特性
摘要:使用Lambda表达式: delegate T delegateMul(T x, T y); static T Multi_Mul(T[] nums, delegateMul func) { 阅读全文
posted @ 2011-09-16 14:16 上校 阅读(216) 评论(0) 推荐(0) 编辑
VS实用的几个快捷键
摘要:Shift+Delete 整行删除,并且将这一行放到剪贴板(这时候不能选中一段内容)F12 转跳到定义,很有用的快捷键 F7 查看代码Shift+F7 查看设计页面F3查找下一个、查找当前光标选中的位置 Ctrl+E D 格式化代码 阅读全文
posted @ 2011-09-16 10:02 上校 阅读(186) 评论(0) 推荐(0) 编辑
鸭子-策略模式(Strategy)
摘要:万事开头难,最近对这句话体会深刻!这篇文章是这个系列正式开始介绍设计模式的第一篇,所以肩负着确定这个系列风格的历史重任,它在我脑袋里默默地酝酿了好多天,却只搜刮出了一点儿不太清晰的轮廓,可是时间不等人,以后再多“迭代”几次吧!在前面的随笔里,我已经提到了,这个系列准备以《Head First Design Patterns》的结构为主线 阅读全文
posted @ 2011-09-15 23:25 上校 阅读(335) 评论(0) 推荐(0) 编辑
C#委托的妙文,让你知道如何发挥委托的作用
摘要:委托和事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。 阅读全文
posted @ 2011-09-15 14:35 上校 阅读(591) 评论(0) 推荐(1) 编辑
设计模式之——简单工厂模式
摘要:最近在看一些关于设计模式方面的知识,打算把学习过程给记录下来,进一步加深自己的理解。 百度百科定义是:从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是实由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单用的模式,可以理解为是不同工厂模式的一个特殊实现。 阅读全文
posted @ 2011-09-14 23:44 上校 阅读(214) 评论(0) 推荐(0) 编辑
只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。
摘要:只有在配置文件或Page指令中将enableSessionState设置为true时,才能使用会话状态。还请确保在应用程序配置的 \\ 节中包括 System.Web.SessionStateMod 或自定义会话状态模块。解决方法如下: 1:检查你的 阅读全文
posted @ 2011-09-12 23:59 上校 阅读(1001) 评论(0) 推荐(0) 编辑
如何在ashx页面获取Session值
摘要:在一般事务处理页面,可以轻松的得到 Request,Response对象,从而进行相应的操作,如下: HttpRequest Request = context.Request; HttpResponse Response = context.Response; 但是要得到 Session的值就没有那么简单了。比如你要在ashx得到保存在Session中的登录帐号Session["userAccount"] 如果你只是context.Session["userAccount"]的话是会报 “未将对象引用设置到对象的实例”的异常 阅读全文
posted @ 2011-09-11 14:14 上校 阅读(254) 评论(0) 推荐(0) 编辑


点击右上角即可分享
微信分享提示