一站式WPF--依赖属性(DependencyProperty)一
Windows Presentation Foundation (WPF) 提供了一组服务,这些服务可用于扩展公共语言运行时 (CLR)属性的功能,这些服务通常统称为 WPF 属性系统。由 WPF 属性系统支持的属性称为依赖项属性。 这段是MSDN上对依赖属性(DependencyProperty...
趣味编程:Functional Reactive Programming
最近我们搞了一些把事件当作对象方面的工作。基于事件的编程再常见不过了,尤其是在和UI相关的WinForm,WPF,Silverlight开发方面。把事件作为一等公民看待之后,我们可以实现一些较为“特别”的编程模型,例如Functional Reactive Programming。这是一种较为优雅的...
监视程序中的死锁及其他
每天回家路上总有一段比较长的路一片漆黑无法看书。这种时候,如果我有兴致则会用手机上上网,但是大部分情况下还是用来想问题的。刚才在路上想起今天的工作之一是让一个类型中的所有方法对多线程“完全互斥”——我不知道如何为它命名,我的意思是一个类中任意两个方法A或B,在A没有退出前,另一个线程是无法访问B的(...
趣味编程:将事件视为对象
如果一个语言(平台)把事件视为对象,则表明它把“事件”作为了语言的一等公民来对待。这意味着,我们可以把一个单独的事件作为参数传递给方法,也可以将其作为一个对象的一部分,这有效地提高语言的抽象能力。试想,如果没有“委托”,在.NET中就无法把“方法”看作是对象,也就很难使用如今各种灵活的抽象方式。同样...
我犯了一个错误,您能指出吗?(结论)
其实许多朋友已经在回复中发现问题所在了,其中最早指出错误的是狼Robot同学,他说: 每个T都会使用一个新的连接。 泛型类中的静态变量会因为T的不同而产生不同的值,也就是说每个T所访问的静态变量都是独立的。 正是这个原因,导致UserRepository和ArticleRepository,虽然似...
我犯了一个错误,您能指出吗?
这是我最近在项目中犯的一个错误,您能指出吗? 这个项目在数据访问方面使用了传统的Repository模式。为此,我定义了一个Repository基类,可以让每个不同的Repository继承它:public abstract class Repository<T> { ... }publ...
把事件当作对象进行传递
最近在琢磨一些事情,和API设计有关。API设计在很多时候是和语言特性有关的,因此如Java这样的语言,在API设计时会处处受到压抑。而C#就能够出现如Moq或Fluent NHIbernate这样的项目。同样,F#能够开发出FsTest,Scala号称Scalable Language,都是依靠着...
较为理想的延迟代理的编写方式
之前我谈到,在普通情况下我们可以很轻松地写出过一个代理类,用来处理延迟加载的情况。当时给出了一个很简单的做法,也就是指创建基类,覆盖它的一些属性实现,类似这种:public class LazySomeClass : SomeClass{ public override int SomeID { g...
如果是能简单解决的问题,就不用想得太复杂了
有个朋友在MSN问我说,有没有关于Emit的资料,它想生成一个类的动态代理。他抱怨Emit还是很麻烦,不过交谈过后知道他是想要做什么。他希望为一个对象的某个属性作延迟加载,这样可以避免一些无谓的消耗。例如:public class SomeClass{ public int SomeID { get...
一份值得阅读的幻灯片:微软对PHP支持的改进,及其它一些胡言乱语
这里有一份我觉得值得推荐给大家的幻灯片(下载链接)。这个幻灯片是不久前举办的WordCamp China 2009上微软王超群的演讲,演讲主题是《熟悉的陌生人:微软对PHP的新支持使WordPress在IIS7上雄起》。WordCamp是业界著名的PHP大会,不过我这里推荐这个幻灯片不是为了为了推广...
通过表达式树构造URL时忽略部分参数
您的使用ASP.NET MVC的时候,一定遇到过使用Post接受数据的Action方法。例如:public class HomeController : Controller{ [AcceptVerbs(HttpVerbs.Post)] public ViewResult List(string k...
您能看出这个Double Check里的问题吗?(解答)
问题请参考:您能看出这个Double Check里的问题吗? 已经很有很多朋友得到了结果,是由于m_categories过早初始化,而导致double check的验证条件被破坏(或者说,满足)。private object m_mutex = new object();private Dictio...
您能看出这个Double Check里的问题吗?
昨天在做code review时看到一位同事写了这样的代码。这段代码的目的使用Double Check的做法来保证线程安全的延迟加载。但是我看到这代码之后发现了一个问题,这个问题不是第一次出现。因此,我打算在博客上记录一笔,希望可以给更多人提个醒吧。 假设,我们有这样一个Category类型,记录的...
趣味编程:函数式链表的快速排序(参考答案)
之前我提出了一个“趣味编程”,模仿Haskell的方式对一个链表进行快速排序。在那篇文章中我解释了Haskell列表的结构,并给出了ImmutableList的基础实现。快速排序的例子很多,多做也没有意思。这题虽然打着“快速排序”的旗帜,但事实上这里的关键在于实现ImmutableList数据结构的...
优化通过表达式树构造URL的性能
我们继续改进通过表达式树构造URL的方式。在上一篇文章中,辅助方法可以正确地识别了ActionNameAttribute,而这次改进的则是性能方面的问题。首先还是来看一下用于从表达式树获取RouteValueDictionary的方法:public static RouteValueDictiona...
通过表达式树构建URL时正确识别ActionNameAttribute
在MvcFutures项目中提供了一个辅助方法,可以将一个表达式树对象转化成一个RouteValueDictionary集合。只可惜,这个辅助方法的毛病比较多。例如,它直接把方法名作为action的值,而忽略了其上标记的ActionNameAttribute。这导致了某个被“改名”的Action方法...