10 2012 档案
摘要:著作权声明:本文由http://leaver.me翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!介绍本文实现模板模式背景有时候我们需要做很多任务,而做这些任务的算法可能不同,这样可以设计成策略模式,这样。执行该任务的基本的一些代码就是一样的。但程序可可以动态的切换来执行任务的不同部分了。现在,真实的情况是有些算法,从实现层面山看,有可能有一些步骤是不一样的,这种情况下。我们可以使用继承来完成。当有个算法,而这个算法的一部分却多样的时候。使用模板模式就很好。GoF定义模板模式为:"Define the skeleton of an algorithm in
阅读全文
摘要:著作权声明:本文由http://leaver.me翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!介绍本文介绍外观模式,并给出简单的实现示例背景写软件的时候,有时候需要处理一系列的对象来完成一个确定的任务.比如,我们给一个万能遥控器写代码,我们需要关掉所有的设备,那么,我们有这样几种选择.第一个就是手动选择每一个设备,然后一个接一个的关闭,这好傻.那我们为什么不再遥控器上放一个按钮,我们按一下就关掉了.按钮的命令会与设备控制器通信然后关掉他们.如果我们又想在晚上12的时候自动关闭设备,那么我们就会有一个基于事件的计时器,与设备通信,然后关闭设备,问题是在两种情况下我们
阅读全文
摘要:著作权声明:本文由http://leaver.me翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!背景本文讨论装饰器模式,这个模式是因为很多情况下需要动态的给对象添加功能.比如我们创建了一个Stream类.后来需要对这个数据流类动态的添加一个加密功能.有人可能说把加密方法写到流类里面啊.然后使用一个bool变量来控制开关就行了.但是这样.这个加密方法只能写一种..如果用派生类来实现.那么..对于不同的加密方法.,都要创建一个子类,举个例子.比如有时候是一些函数的组合.我们最终的派生类的数目基本上就和排列组合的数目一样了.我们使用装饰器模式来解决这个问题.GoF描述为&
阅读全文
摘要:著作权声明:本文由http://leaver.me 翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!本文用C#实现原型模式,也会讨论深浅拷贝,已经如何在.net中高效实现ICloneable 接口介绍有时候我们需要从上下文得到一个对象的拷贝,然后通过一些独立的操作来处理他。原型模式在这种情况下很适用GoF 定义原型模式为用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Specify the kind of objects to create using a prototypical instance, and create new objects by
阅读全文
摘要:著作权声明:本文由http://leaver.me翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!本文讨论题目的内容。然后讨论IEnumerable接口如何使得foreach语句可以使用。之后会展示如果实现自定义的集合类,该集合类实现了IEnumerable接口。Yield关键字和遍历集合后面也讨论。背景一使用集合。就发现遍历集合就跟着来了。遍历集合最好的方式是实现迭代器模式-Understanding and Implementing the Iterator Pattern in C# and C++(这篇文章我过几天翻译一下) ,C#提供foreach来以一种优
阅读全文
摘要:这是Office2010中的文件菜单点开后的效果。本文我将以强大的WPF来实现类似的效果。希望你能有所收获。而不是只拷贝/粘贴代码而已。开始之前。先把TabControl找个地方放着。<Window x:Class="TestClient.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Ma
阅读全文
摘要:有时候对于对象来说。在一个软件中,不直接通过互相引用而做到共享信息是非常有用的。比如像带有插件的软件。可以互相进行通信。假设我们有了很多对象。其中一些包含一些数据。而另一些对象需要消费这些数据 不同的子集,我们不通过对数据生产者和消费者的直接引用来实现,而是通过更低耦合的方式。叫做创建一个“BlackBoard”(黑板)对象。该对象允许其他对象自由对其进行读取/写入数据。这种解耦方式使得消费者不知道也不必知道数据来自哪里。如果想要了解更多关于黑板模式的信息。我们常说的。Google是你最好的朋友。 一个最简单的黑板对象应该是 Dictionary一些简单的命名值的字典。所有的对象共享同一个字.
阅读全文
摘要:简单科普文,作者给的Demo我合并了下。VS2010直接打开解决方案。二者都有。介绍本文展示在WPF中如何创建用户控件并且如果在WPF项目中使用。我将使用VS2008和C#来展示如何创建一个自定义的ToolTip背景这篇由Sacha Barber.写的和我的有点像。使用代码开始。首先,我们创建一个用户控件。因此,我们选择新建WPF用户控件类库(WPF User Control Library)。现在。我们可以创建或者编辑XAML代码来创建自定义的用户控件了。我使用XAML来创建自定义的ToolTip。你想做什么随你。<UserControl Name="UserControlT
阅读全文
摘要:介绍最近,我发现我需要个圆角多边形。而且是需要在运行时从用户界面来绘制。WPF有多边形。但是不支持圆角。我搜索了一下。也没找到可行的现成例子。于是就自己做吧。本文描述了圆角多边形的实现,也包括如何用在你的项目里。在Demo里面的RoundedCornersPolygon 类是完整的实现。下载的Demo包括两部分1. 通过XAML绘制圆角多边形2. 运行时创建圆角多边形背景多边形可以被认为是沿着一个给定半径的圆的边缘和一些指定点/边。所构成的点的集合。在WPF中。你可以给Polygon对象的Points属性添加一系列的点来制作多边形。XAML方式<Canvas> <Polygo
阅读全文
摘要:图11.介绍从我开始使用vista的时候,我就非常喜欢它的圆形玻璃按钮。WPF最好的一个方面就是允许自定义任何控件的样式。用了一段时间的Microsoft Expression Blend后。我做出了这个样式。我觉得做的还行。因为。我决定分享。如我所说。我使用Microsoft Expression Blend来做。但是。我也是用XAML编辑器--Kaxaml。2.概述玻璃按钮样式包含了三层。组织了玻璃效果(Glass Effect)和一个ContentPresenter 来存储按钮的内容。所有的这些层都在一个最外层的Grid里。当鼠标放到按钮上,按下去的时候也定义了一些触发器(Trigger
阅读全文
摘要:WPF里是没有LinkLabel控件的。因此我自己写一个。首先。我们看一下WPF中什么类似的组件可以实现这个链接功能如果你想要模拟一个LinkLabel控件。你可以在TextBlock里使用内联的Hyperlink。像下面这样<TextBlock> <Hyperlink> <Run Text="Test link"/> </Hyperlink></TextBlock>你可以使用Label控件。加一个内联的HyperLink,但是我认为TextBlock更好。因为你可以在Expression Blend中通过Inli
阅读全文
摘要:介绍这是我在CodeProject上的第一篇文章。我希望对你有用当我开发软件的时候。我通常因为一个很耗时是任务需要完成。而请求让用户等待,并且通过也允许用户取消。不论我做何种操作(比如下载文件。保存大文件等等)。我都需要做下面几件事:通过一个模态对话框来让用户等待操作完成能让用户看到进度。能让用户随时取消。我搜了好久也没找到拿来就能用的窗体控件,也许是我没找到。于是我自己写。。图1背景BackgroundWorker 类包含了我需要完成任务的所有东西。我只需要给他提供一个对话框。使用代码ProgressForm 包含了一个BackgroundWorker ,你要做的仅仅就是提供了一个完成工作的
阅读全文
摘要:1 介绍我知道。网上有很多现成的FTP软件。但是。我们也想要了解FTP的一些底层机构,因此。 这个开源的项目在你学习FTP知识的时候也许对你有些帮组。程序的界面看起来像FileZilla,FileZilla虽然流行但是有些bug,当我打开我博客的时候总是有问题。我需要通过FTP连接我的服务器。发送文件,下载文件等等。因为。我决定写我自己的软件来处理所有的情况。FileZilla足够好。但它不是我的。2 背景看看我们已经知道的。我们知道FTP是一个标准的基于TCP网络协议。用于从一个主机向另一个主机传输文件。它是一个C/S架构。图2FTP程序曾经是基于命令行的。我们仍沿可以通过cmd.exe连接
阅读全文
摘要:介绍本文讨论生成器设计模式,讨论该模式什么情况下使用,怎么实现。并且。最后会有一个简单的生成器模式的实现。背景当我们的程序需要创建一个对象。而这个对象必须由很多不同的对象来构造的时候。为了构造最后的对象。我们不得不组合那些部分对象。最后我们会发现我们的代码被各种各样的部分对象的细节所弄的难以理解为了说明上面的情况。我们做一个手机生产制造系统的例子。假定我们我们有一个已经安装在手机供应商那块的一个系统。现在供应商系那个要根据一些参数来创造一个新手机。比如触屏,操作系统,电池等。如果我们已经有了这些部分的对象,那么上述部分的任意组合将会导致客户端代码复杂难以管理。比如决定生产哪种手机的模块。生成器
阅读全文
摘要:背景对于指定的任务有不同的方案可供选择,通常是很好的。因为可能某一种方案会更加适合该任务,但是有时候做决定会很难。因为这些不同的方案有其各自的优缺点。我经常会停下来好好想想,是不是接口比委托更适合或者是更不适合某个任务。有时候我甚至会回去看我写的代码,这些代码刚开始使用委托来实现,我后来用接口替换掉。因此,是时候写篇文章来阐述一下这两种技术的优缺点了。性能我经常看到有人问接口是不是比委托更快啊。或者是不是相反。通常。别人给的答案会是: 接口更快。委托相当慢 委托更快,因为他们是指向方法的指针,接口则需要一个v-table(虚函数解析表),然后找到委托他们一样快,但委托更容易使用好吧。那些都是错
阅读全文
摘要:介绍 使用ListViewLayoutManager 可以控制ListView/GridView列的布局1. 固定列宽:有着固定列宽的列2. 范围列宽:有着最小最大宽度的列3. 比例列宽:成比例的列宽范围列宽可以限制列的宽度,也包括填充列的剩余可视区域。据我们了解的Html中的表格和Grid空间。比例列以一个百分比来定义列宽,以下几个因素共同确定了比例列的宽度。1. 垂直ListView滚动条的可视与否2. ListView控件宽度的改变3. 非比例列宽度的改变本程序支持通过XAML或是后台代码来控制ListView。如果通过XAML来控制。则允许ListViewLayoutManager .
阅读全文
摘要:今天早上翻译了Yet-Another-XML-Serialization-Library-for-the-NET,将近4个小时把30页的文档翻译完了。因为文章很长。重新排版压力太大。。我把翻译好的做成了pdf,所以本文只列出前两部分。如果不符合规则。请管理员撤下。文档下载:XML序列化神器整个文档目录如下:目录1介绍... 12 为什么使用YAXLib. 23 YAXLib使用指南... 23.1 基本的使用和格式化... 23.2 序列化集合类的对象... 53.3 序列化字典类... 83.4 序列化嵌套的对象... 133.5 添加xml注释... 174 反序列化和错误处理机制...
阅读全文
摘要:上周,在Red Gate好朋友的帮助下。我发起了一个名为小竞赛赢得优秀的SQL Source Control 5份授权的活动。参加的方式很简单-分享你使用源代码控制过程中,本可以避免的最痛苦的经历许多痛苦的故事都出现了。但是我认为这五个获奖者的故事值得分享,并且我都做了评论,因为我觉得随着时间的流逝,这些故事依然对我们有所启发。那么,开始享受这些故事吧,我希望这些知识中的闪光点能够帮助你以后不会掉进相同的陷阱里。给获奖者:希望那些授权可以帮助抚慰你们关于那些已经过去的痛苦记忆。不久我会联系你们关于奖项颁发的相关事宜。1.通过Ctrl-Z来进行源代码控制第一个故事来自courtesy of My
阅读全文
摘要:介绍调试是软件开发周期中的一个很重要的部分,有时很有挑战性,有时候则让程序员迷惑,有时候让程序员发疯,但是。可以肯定的是,对于任何不是太那个微不足道的程序来说,调试是不可避免的。近年来,调试工具的发展已经使得很多调试任务简单省时了。本文总结了十个调试技巧,当你使用VS的时候可以节省你很多时间。1.悬停鼠标查看表达式调试有时候很有挑战性,当你步入一个函数想看看哪块出错的时候,查看调用栈来想想值是从哪来的。另一些情况下,则需要添加一些监视表达式,或者查看局部变量列表,这通常还是花费一些时间的,但是。如果你把你鼠标指向你感兴趣的一个变量。你会发现事情简单多了。而且,类和结构体可以通过单击展开。这样。
阅读全文