06 2007 档案
delegate与模式
摘要:GoF的《Java与设计模式》一书就不再说其中的重要性了,这里主要想谈一下.Net中的Delegate对设计模式的影响。 与Java相比.Net的一个比较好的改进是为事件提供了一个比较好的模型,其中的第一功臣是Delegate,那么Delegate的作用是什么? 简单的来说Delegate是一个函数接口+一个函数列表。 函数接口可以说是函数编程(之后简称FP)里面的思想(...
阅读全文
Lambda表达式的非Linq用法
摘要:说到Lambda表达式,几乎所有人的反应就是Linq,不错,Lambda表达式的最大用途确实是在Linq,Lambda表达式本身也是为Linq量身定做的。 但是Lambda表达式本身只是一个匿名函数的简化版,因此,并不是针对Linq的。换而言之,任何匿名函数可以做的事情,Lambda表达式都可以做。就以Windows Form的程序为例子吧: Code highlighting pr...
阅读全文
活用接口——反例:MultiKeyDictionary
摘要:字典Dictionary相信大家都用过,但是如果字典的键是一个TKey数组(或者IList),怎么办? 这就是今天要讨论的案例:MultiKeyDictionary 先来看看反例: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--...
阅读全文
绕开频繁反射
摘要:在.net里面,反射是一个功能强大的工具,但是,这个强大功能背后却是性能的损失。尤其是频繁的反射,将降低总体性能。 为了程序运行的更快更好,有必要在频繁反射的地方添加必要的缓存,用尽量少的反射,获得必要的灵活性,而又不降低太多性能。 说到性能,先说一下在.net中的性能排列吧,最快的是非虚方法,然后依次是虚方法、接口方法,委托,反射。前面3个的性能几乎可以忽略。委托比一般的方法...
阅读全文
不要用错单例模式
摘要:SingleTon模式也许是被最广泛应用的模式,但是,最近看到的几个SingleTon不得不让我出一身冷汗。 先来看看标准的反例:C#版 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> public static SomeObje...
阅读全文
泛型+反射+特性=以静制动
摘要:泛型、反射、特性都是.Net强大的功能之一,关于这3个的强大之处我就不再重复说了,今天想说的是,将这三者结合起来,组成一个强大的以静制动、以不变应万变的方案。 这个方案,我已经通过一些实验,将它变成了真实的代码。当然如果已经有人有了类似的方案,纯属巧合。本方案的核心是将特性引入目前已经有很多人讨论过的Emit中。 方案的目的: 使用方需要知道: 1、接口ITestD...
阅读全文