摘要:上一篇主要讲述了C++中的类型转换,本篇讲述的是C#中的类型转换。 不同于复杂的C++,C#语言相对简单,其类型转换规则也比较少,主要有两种:as运算符类型转换和cast运算符类型转换。as运算符的方式不会抛出异常,转换失败返回null值,这也决定了as运算符不能用在值类型上;cast则是强制类型转换,用户可以定义自己的隐式或显式类型转换符。cast运算符在转换失败时会抛出异常。因此基于转换安全...
阅读全文
摘要:多态是面向对象理论的一个重要概念,类型转换是程序开发中不可避免的行为,两者总是贯穿在我们程序开发中,对开发者来说并不陌生。然而,就是这么熟悉的内容,我还是犯过一些错误,因此有必要对其主要内容做一整理来加深理解。本文的重点是总结C++和C#中有关类型转换的一些基本原理,之所以提到多态是因为类型转换后多态函数的执行是比较容易被误解的一点。基于这些出发点,本文并不是一篇介绍多态的详细文章。希望本文能给对...
阅读全文
摘要:本文是介绍实用工具Reflector的一个小应用的:查看C#代码的低版本实现。 为什么要查看? 语言发展的越来越高级,越来越抽象,抽象的语言势必包装隐藏了一些细节。而有时却有必要查看细节是如何,比如lambada表达、LINQ表达式等是如何实现的?IL是一个选择,但我比较讨厌不管问题大小,动辄就拿IL说事的做法,其实大多数问题不必要看IL。另一个角度,比如说明书,假若有10万言的和300字的两个...
阅读全文
摘要:在对Closure的再思考里面我提到了说网上有观点认为用lambda表达式声明的“递归”实际上并不是真正的递归。本文针对这个观点做专门的研究。 传统的递归 所谓传统的递归,是指一直来我们所经常使用的经典结构的递归。以n的阶乘来作为例子说吧,“传统”的递归结构可以用如下的代码表示: public static int FacRecursive(int n){ if (n <= 1) retu...
阅读全文
摘要:前些日子我对Closure做了初步的思考, 却总觉得意犹未尽,感觉Closure还没有进入到我心里去,还没有真正地、完全地理解。好吧,就把近日来杂乱的思考整理一下写出来吧。 为了便于理解,就让我从一些废话开始吧。众所周知,在C#中有两种类型——值类型和引用类型。就从引用类型谈起吧 。 引用类型的回顾 对于下面的代码: object obj = new object();object A = ...
阅读全文
摘要:一直以来受到"工具只是工具"类似观点的影响,工具在我的思想中便不被重视。然而,在很多方面由对这个观点的错误理解造成了我对好多优秀工具的疏忽,从而多做了好多不必要的工作。当然,我并不是否认"工具只是工具"这个观点,毕竟其本意是指导我们不要看不见事物的本质。另一个方面,"工欲善其事,必先利其器"这个观点也是响当当的,是告诉我们好的工具是可以省去我们很多没必要的劳动的。话题回归到Visual Studi...
阅读全文
摘要:本来在开心网上对这幅图做了一个解释的,昨天想翻出来,无奈无论如何也找不到了,于是有必要写下来记录一下了。网上流传的关于这副图的"功能"想必不再需要我赘述。总之流言很多,"耶鲁大学最新研究发现"的说法就更有损耶鲁大学的名声了,无非是此小游戏作者为了对其伟大的想法加上一定的"砝码"而杜撰的,然而是否属实也无法考证,在此我也只是推测。首先,让我们来澄清一下"顺时针"和"逆时针"的概念。这两个概念和"左"...
阅读全文
摘要:什么是多重using(mutiple using)?所谓多重using,是指C#的一个特性,即如下的代码结构:[代码]而下面列的代码结构叫嵌套using(nested using):[代码]为什么建议使用多重using?我们知道,使用using结构是用来处理IDisposable的对象。加入我们不用using结构,IDisposable的对象我们可以这样来处理:[代码]这样做的缺点也很明显:1)开...
阅读全文
摘要:什么是Closure? 在我的这篇博客中谈到了代理的行为不是我期望的结果的疑问。经过学习理解发现是有关Closure的知识,Closure是在函数式编程比如F#,Haskell等中的一个重要的概念。Clousre是指外部变量被绑定在函数内部。这样理解起来可能比较抽象,用C#示例代码说起来可能比较容易理解,在C#中涉及到Closure的主要是匿名代理和lambda表达式等。首先看一个示例: Code...
阅读全文
摘要:一直以来通过Word 2007写博客,写完的博客就发布到博客园上,然后本地不保存word文档。今天通过研究发现(呵呵,是传说中的研究发现哦)Google Docs可以直接发布文章到blog上。接下来就介绍一下如何发布:1.新建一个Google文档2.文档准备完毕后,点击Google Docs的“Share"按钮,在弹出的菜单中选择”Publish as web page..." 3. 如果你没有在...
阅读全文
摘要:在前一篇的备忘记录到了System.Timers.Timer, 本篇将继续第三个Timer也是最推荐使用的Timer:System.Threading.Timer。要点四:不同于前面的两个Timer,System.Threading.Timer, 既没有一个Interval属性,也没有Start和Stop方法,也没有事件可以用来注册。这些相应的设置都放在了构造函数里,也就是说通过构造函数用户需要告...
阅读全文
摘要:在开发中经常用到Timer,也注意到了有多个Timer且每个都能实现自己想要的简单功能,却从未思考过它们的异同。前些日子在开发的时候用到了Timer,由于对Timer的时间要求比较严格,结果发现了很多问题。最后才意识到原来自己对各个Timer很是不了解。认真研究一下它们的异同势在必行。MSDN magazine上有一篇很不错的文章(http://msdn.microsoft.com/en-us/m...
阅读全文