随笔分类 -  c#

用dynamic增强C#泛型表达力
摘要:由于C#采用基于reification的泛型机制,泛型类会单独编译,并且在运行时存在;因此,C#对于泛型参数的要求更加严格,只能通过where关键字表达基于继承关系的约束,无法通过duck typing的方式表达类型约束。本文介绍了一种基于动态duck typing机制的泛型参数约束方法,增强了C#的泛型表达能力。 阅读全文

posted @ 2010-11-21 11:30 Todd Wei 阅读(6524) 评论(7) 推荐(3) 编辑

对象和流
摘要:人们常常看着照片回忆起从前,清晰地感觉到童年,青年,中年,老年一路走来的各种变化。从这种变化中,我们可以抽象出3个关键词:对象、时间和状态。对象拥有状态和标识,在标识不变的情况下,状态随时间发展演变。这代表了一种动态的世界观:时间本身并不属于世界,世界是在时间维度上不断演变的状态。在这种世界观的指导下,通过计算机程序模拟现实世界问题时,我们用计算机中的对象状态表示世界的状态,用计算机中对象的状态的变化表示世界状态的变化和时间进程。与上面动态的世界观不同,另一种世界观认为世界本质上是静止的。怎么理解呢?比如:一个历史人物,在他生活的每一天里都有变化,从这个角度看是状态的变化;但是如果纵观他的一生 阅读全文

posted @ 2010-08-22 13:26 Todd Wei 阅读(2646) 评论(4) 推荐(3) 编辑

C# vs C++之三:静态构造函数
摘要:C++语言规范并未包含类似C#静态构造函数的东西,但在使用类之前做初始化工作的需求却是客观存在的。本文尝试通过C++的模版机制模拟实现静态构造函数,避免手动初始化的繁琐实现。本实现具有以下特点:在第一次构造类对象之前自动调用类提供的静态构造函数;静态构造函数被调用的时机是确定的;利用C++的局部静态变量初始化机制保证了线程安全性;基于继承的实现机制并未改变派生类的对象内存布局。 阅读全文

posted @ 2009-11-14 17:53 Todd Wei 阅读(5507) 评论(16) 推荐(3) 编辑

C# vs C++之二:GC vs RAII
摘要:C#和C++两门语言的定位不同,它们在资源管理方面采取了两种截然不同的方式:一为GC,一为RAII。GC让程序建立在更高的抽象层次上,使资源管理变得更方便,更安全;而RAII则保留了C的底层能力,同时在C++特性的支持下提供了简单有效的资源管理方式。我们知道C++最激烈的批评往往来自于C 社区,而在我看来C程序员可以不接受虚函数,不接受模板,但有什么理由不接受RAII呢?可以说RAII是C++相对C来说几乎无副作用的明显进步。 阅读全文

posted @ 2009-08-19 08:42 Todd Wei 阅读(6487) 评论(44) 推荐(9) 编辑

C# vs C++之一:委托 vs 函数指针
摘要:比较C#委托和C++函数指针的异同,探讨C++ functor和静多态:1.C#委托对象是真正的对象,C/C++函数指针变量只是函数入口地址;2.C++的委托对象:functor;3.C++的静多态:模版 阅读全文

posted @ 2009-08-09 14:29 Todd Wei 阅读(13087) 评论(18) 推荐(19) 编辑