随笔分类 -  [02] 语言编程

摘要:在上一篇解惑中,我们提到了对象的初始化顺序。当我们创建一个子类的实例时,总是会先执行基类的构造函数,然后再执行子类的构造函数。那么实例字段是什么时候初始化的呢?静态构造函数和静态字段呢?今天我们就来研究一下这个话题。 阅读全文
posted @ 2016-02-29 00:02 麒麟.NET 阅读(2332) 评论(9) 推荐(1) 编辑
摘要:在C#中,用`virtual`关键字修饰的方法(属性、事件)称为虚方法(属性、事件),表示该方法可以由派生类重写(override)。虚方法是.NET中的重要概念,可以说在某种程度上,虚方法使得多态成为可能。然而虚方法的使用却存在着很大学问,如果滥用的话势必对程序产生很大的负面影响。 阅读全文
posted @ 2016-01-26 00:24 麒麟.NET 阅读(3134) 评论(11) 推荐(8) 编辑
摘要:只有当所判断的Type为参数且必须按引用传递的情况下,IsByRef才为true。 阅读全文
posted @ 2012-07-19 12:54 麒麟.NET 阅读(1307) 评论(0) 推荐(0) 编辑
摘要:我们通常提到C#中的值和引用,大多数情况可能都是指值类型和引用类型,但实际上值和引用有着更加丰富的含义。我这两篇文章试图把这些概念总结出来,讲解了值类型和引用类型的值是什么,以及它们在按值传递和按参数传递时有什么相同和不同之处。 阅读全文
posted @ 2012-06-15 16:55 麒麟.NET 阅读(9224) 评论(16) 推荐(6) 编辑
摘要:本文主要澄清关于C#值和引用的两个误区:值类型的存储位置和引用到底是不是地址。 阅读全文
posted @ 2012-06-12 14:30 麒麟.NET 阅读(14434) 评论(30) 推荐(11) 编辑
摘要:对于一个动态类型来说,你可以认为它包含任意成员,它们都能通过编译。但到了运行时,到底是否拥有这些成员,就真相大白了。 阅读全文
posted @ 2011-03-14 11:14 麒麟.NET 阅读(3625) 评论(9) 推荐(3) 编辑
摘要:在编写LINQ时,为了保持代码清晰,我们通常会将多个Where进行连接。但多个Where是否意味着多次迭代呢?直觉告诉我们显然不是。因为Where只是生成一个可迭代的对象,在对该对象进行foreach之前,是不会真正执行迭代的。但编译器是如何处理这种Where连接的呢? 阅读全文
posted @ 2011-03-03 10:09 麒麟.NET 阅读(1270) 评论(5) 推荐(0) 编辑
摘要: 前一阵子更新了系统,鸟枪换炮地装上了WIN7,可是项目却出现了莫名其妙的问题。我这个项目的客户端启动之后会从服务端获取系统时间,然后更新本地时间。但我发现每次启动客户端后,本地时间都会被改为8小时之前。起初我以为是服务器上系统时间错了,也就没管,一直以8小时前的本地时间进行调试。但是当这影响了我的作息时间,导致下班延后给人一种主动加班的表象时,我无法容忍了,决定到服务器上一看究竟。 阅读全文
posted @ 2010-05-13 10:43 麒麟.NET 阅读(6043) 评论(8) 推荐(2) 编辑
摘要:老赵在反对北大青鸟的随笔中提到了数组反转。这的确是一道非常基础的算法题,然而也是一道很不平常的算法题(也许所有的算法深究下去都会很不平常)。因为我写着写着,就写出来8种方法……现在我们以字符串的反转为例,来介绍这几种方法并对它们的性能进行比较。 阅读全文
posted @ 2010-04-23 13:16 麒麟.NET 阅读(24409) 评论(53) 推荐(28) 编辑
摘要:C# FAQ最新的随笔中再次提出了使用表达式树访问对象及其成员的问题,这次讨论的是如何获取对象和属性的值。(该博客两个月前曾提出使用表达式树访问对象、类型和成员,我在第一时间进行了翻译) 阅读全文
posted @ 2010-03-17 15:55 麒麟.NET 阅读(2651) 评论(3) 推荐(1) 编辑
摘要:使用表达式树访问对象的成员,可以避免常规反射方法导致的硬编码问题。 阅读全文
posted @ 2010-01-07 16:33 麒麟.NET 阅读(1680) 评论(0) 推荐(0) 编辑
摘要:我们在写代码时往往会在foreach语句中使用某个方法,如: foreach (string foo in Foo()) { } 在这段代码中,Foo方法会执行多次吗? 阅读全文
posted @ 2009-12-22 15:55 麒麟.NET 阅读(1600) 评论(1) 推荐(0) 编辑
摘要:在警惕值类型的陷阱中,乌卡卡同学指出第一个示例之所以出现问题,是因为委托的实现方式不对。我能想到的“委托的实现方式”除了这种正常的赋值,剩下的就是用Lambda表达式或匿名方法了了,于是我把代码改为如下的形式 阅读全文
posted @ 2009-12-10 10:53 麒麟.NET 阅读(1823) 评论(17) 推荐(1) 编辑
摘要:在使用值类型LazyString分析字符串的评论中,有人贴出了这样两段有意思的代码。我们来逐一分析。 阅读全文
posted @ 2009-12-09 16:37 麒麟.NET 阅读(1881) 评论(14) 推荐(2) 编辑
摘要:Jeffrey Richter在最新的随笔中透露,CLR via C# 3rd Edition已经提交出版社编辑,并将于明年3月22日Visual Studio 2010发布时同步出版。 阅读全文
posted @ 2009-11-02 15:17 麒麟.NET 阅读(1487) 评论(3) 推荐(0) 编辑
摘要:委托与很多设计模式都有着千丝万缕的联系,在前面的随笔中已经介绍了委托与策略模式的联系,本节主要来讨论委托与其他两个模式:观察者模式和模板方法模式。 阅读全文
posted @ 2009-09-07 16:59 麒麟.NET 阅读(3765) 评论(7) 推荐(4) 编辑
摘要:在把委托说透(1)和(2)中,先后介绍了委托的语法和本质,本文重点介绍.NET中与委托息息相关的概念——事件 阅读全文
posted @ 2009-09-02 17:12 麒麟.NET 阅读(4374) 评论(13) 推荐(6) 编辑
摘要:这不是一篇介绍Lambda表达式与递归函数的随笔,而是介绍这方面知识的链接集合。 阅读全文
posted @ 2009-09-01 14:12 麒麟.NET 阅读(1120) 评论(1) 推荐(1) 编辑
摘要:在上一篇随笔中我们通过示例逐步引入了委托,并比较了委托和接口。本文将重点剖析委托的实质。 阅读全文
posted @ 2009-08-28 09:56 麒麟.NET 阅读(11146) 评论(39) 推荐(12) 编辑
摘要:委托,本是一个非常基础的.NET概念,但前一阵子在园子里却引起轩然大波。先是Michael Tao的随笔让人们将委托的写法与茴香豆联系到了一起,接着老赵又用一系列文章分析委托写法的演变,并告诫“嘲笑孔乙己的朋友们,你们在一味鄙视“茴”的四种写法的同时,说不定也失去了一个了解中国传统文化的机会呢!”。 阅读全文
posted @ 2009-08-26 13:46 麒麟.NET 阅读(13453) 评论(45) 推荐(6) 编辑