随笔分类 -  C#

摘要:这是上周在代码审阅会议上讨论到的一段代码,这段代码的作用是根据指定记录数量和页面大小来计算最大分页数量的。 阅读全文
posted @ 2014-01-06 13:55 O.C 阅读(2163) 评论(8) 推荐(2) 编辑
摘要:最近老陈要针对企业邮箱做一些开发,以对接企业OA神马的,但企业邮箱唯独没有开放账号密码验证功能,很恼火!不得已,翻出早些年的Asp代码改编成了C#类,实现了一个C#下的通过POP3协议进行邮箱账号验证的类,而且还能完美支持SSL加密,貌似很实用的样子,分享给大家先! 阅读全文
posted @ 2013-10-23 17:02 O.C 阅读(3333) 评论(0) 推荐(0) 编辑
摘要:这段代码是来自于一个真实的exe的反编译结果。我发布到社区里面之后,目前为止没有人能够给出我期望的看法或建议。 阅读全文
posted @ 2012-05-10 14:53 O.C 阅读(2731) 评论(8) 推荐(1) 编辑
摘要:“请对我的代码指手划脚”是我们群内搞的一个不定期的常规性活动,以代码审阅和细节重构为主线,大家可以自由发表自己的意见和建议,也算得上是一种思维风暴。感觉到这个活动很有意义,有必要总结并记录下来。 阅读全文
posted @ 2012-04-29 00:08 O.C 阅读(2797) 评论(5) 推荐(2) 编辑
摘要:“请对我的代码指手划脚”是我们群内搞的一个不定期的常规性活动,以代码审阅和细节重构为主线,大家可以自由发表自己的意见和建议,也算得上是一种思维风暴。感觉到这个活动很有意义,有必要总结并记录下来。今天我发起了4短代码,都有一定的代表性。今天我就其中的一个代码片段的重构做一个简单的总结和分享。 阅读全文
posted @ 2012-04-24 23:19 O.C 阅读(2892) 评论(13) 推荐(4) 编辑
摘要:本课我们主要讨论“命令解释器”的实现。命令就是指令,指令也是构成更加复杂的模板引擎的基本元素之一。至此我们可以归纳出来,模板引擎在工作的过程中,首先将字符流转换为Token流,然后再将Token流转换为Element集合(也算是流),然后将特定的Element单独拿出来或组合在一起形成指令、语句等。写一个模板引擎,和写一个小型的编译器几乎相当,因此我们需要耐心、细心! 阅读全文
posted @ 2012-04-15 10:21 O.C 阅读(4150) 评论(3) 推荐(5) 编辑
摘要:与置换型模板引擎不同的是,解释型模板引擎包含了一个专用解释器,有了解释器的存在就可以支持一些更加复杂而严谨的语法。熟悉设计模式的朋友此时此刻应该能够回想起来“解释器模式”,它是将一些业务封装成一个或多个命令,然后通过一个复杂的解释器(Interpreter)来解析执行来满足生产需求的。实际上,解释型模版引擎就是一个较为复杂的解释器模式的实现而已。具体到模板引擎技术上来,解释器的工作任务实际上就小了很多。按照数据封装模式的不同,解释型模板引擎分为命令解释器和反射解释器两个大类。 阅读全文
posted @ 2012-04-09 09:01 O.C 阅读(5301) 评论(6) 推荐(4) 编辑
摘要:在进入解释型模版引擎的探讨之前,我决定先分享一下这篇博客。因为在解释型引擎里将会引入反射的概念来实现更多、更复杂的功能。可能大家谈到反射面部肌肉都开始抽搐了吧!因为在托管语言里面,最臭名昭著的就是反射!它的性能实在是太低了,甚至在很多时候让我们无法忍受。不过不用那么纠结了,老陈今天就来分享一下如何来优化反射! 阅读全文
posted @ 2012-04-07 10:05 O.C 阅读(7617) 评论(11) 推荐(7) 编辑
摘要:置换型模板引擎系列是我们进入模板引擎开发领域的基础课程,这里讲述的一些原理、概念和实践方案都是后续模板引擎开发中所需要用到的,正所谓是由浅入深、循序渐进!在编写这些博文的时候,我遇到了很多阻力。为了能够让菜鸟朋友入门又不让高手们嗤之以鼻感觉到木有干货,这让老陈真的是煞费苦心!如果仅仅是开源一份代码出去,那么完成这样的项目本身可能不需要多少时间,然而要把这些组织成文字分享给大家,实在是很头疼的一件事情。 阅读全文
posted @ 2012-04-06 09:21 O.C 阅读(3686) 评论(6) 推荐(4) 编辑
摘要:在上一篇我们以简单明快的方式介绍了置换型模版引擎的关键技术——模板标记的流式解析。采用流式解析可以达到相当好的解析性能,因为它基本上只需要对字符串(模板)扫描一次就可以完成所有代码的解析。不像String.Split()和正则表达式那样会造成很多迭代效应。今天我们引入一个较为复杂的示例,然后封装一个实用级别的模板引擎。封装就意味着使用者无需了解内部如何实现,只需要知道如何引用即可。 阅读全文
posted @ 2012-04-05 09:41 O.C 阅读(4018) 评论(9) 推荐(3) 编辑
摘要:上次我们简单的认识了一下置换型模板引擎的几种情况,当然我总结的可能不够完善,希望大家继续补充。谈到按流替代式模板引擎的原理但并没有给出真正的实现。跟帖的评论中有一位朋友(Treenew Lyn)说的很好:“Token 解析其实是按一个字符一个字符去解析的”。的确是这样,而且唯有这样才能够实现更加高效、更加准确的模板引擎机制。我们首先将模板代码分解成一个一个的Token,然后按照顺序形成Token流(顺序集合),在输出的时候替换规定好的语法标记即可。 阅读全文
posted @ 2012-04-01 09:20 O.C 阅读(4494) 评论(9) 推荐(7) 编辑
摘要:很显然,置换型模板引擎说的就是替换式模板引擎。它的工作原理是查找和替换字符串,但这个字符串的替换过程又分为直接查找替换和按流替代输出两种。直接查找替换实现简单,但存在一定的性能障碍,而按流替代的方式性能更好一点,但理解起来却没那么容易。今天我们就专门来讨论讨论置换型模板引擎的关键技术和实现。 阅读全文
posted @ 2012-03-31 09:08 O.C 阅读(5506) 评论(12) 推荐(10) 编辑
摘要:最初的模板引擎是为了实现业务逻辑和代码分离,后来发现这样的模式给界面维护带来了极大的便利,这也是一种MVC模式的实现。现在我们在很多地方都可以看到模板引擎的身影,比如各种CMS、论坛、代码生成器,甚至是Mootools、JQuery等JavaScript库都用到了模板引擎。那么模板引擎到底是个什么东东呢?模板引擎在实际生产环境中有着什么样的意义?我们到底是否应该使用模板引擎技术?接下来我们会一一解答。 阅读全文
posted @ 2012-03-29 09:13 O.C 阅读(12297) 评论(19) 推荐(12) 编辑
摘要:Levenshtein算法,用于计算两个字符串之间的Levenshtein距离。而Levenshtein距离又称为编辑距离,是指两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 今天老陈翻译的这篇文章讲的是一种快速、内存高效的Levenshtein算法实现。 阅读全文
posted @ 2012-03-27 09:00 O.C 阅读(14550) 评论(14) 推荐(11) 编辑
摘要:这篇文章阐述了当使用MemoryStream处理大型数据集时经常触发的模棱两可的OutofMemoryException异常,并且介绍了一个类——MemoryTributary,他可以用来替代.NET内置的MemoryStream,并且能够支持大型数据的处理。 阅读全文
posted @ 2012-03-25 10:12 O.C 阅读(9411) 评论(9) 推荐(14) 编辑
摘要:很多时候我们需要以编程的方式获取命令行输出的内容,研究了不少时间,终于搞定了。获取命令行输出内容的方式有传统和异步两种方式。 阅读全文
posted @ 2012-03-23 23:53 O.C 阅读(21800) 评论(3) 推荐(2) 编辑
摘要:在.NET枚举类型优化探讨(二)中我们探讨了“使用类或结构来替代部分枚举类型”的方案并试图进行进一步的重构和优化,但是发现有很多限制,不但没有完成重构,且发现了很多该方案不适用的地方和缺陷。在某些情况下,这种方案会对生产带来相反的作用,所以在文中我建议不要滥用。今天我们来探讨一下使用.NET中的Attitude特性来扩展.NET枚举值的方案。 阅读全文
posted @ 2012-03-22 12:05 O.C 阅读(2474) 评论(1) 推荐(3) 编辑
摘要:昨天在.NET中的枚举值(一)中我提到,如果将该文中的实现进一步架构,提炼出一个抽象类作为自定义枚举类型的基类的话,肯定会对后续开发有很好的帮助。但实际上,老陈犯下了一个严重的错误…… 阅读全文
posted @ 2012-03-21 11:48 O.C 阅读(1077) 评论(0) 推荐(0) 编辑
摘要:昨天晚上通过博文《Java中的枚举值》和大家分享探讨了Java枚举值语法的非常规性和它给力的地方,该文引起了.NET猴子的一些非议,因为Java能做到的,.NET基本上也能做到。那么今天老陈就来和大家共同研究一下.NET中的枚举类型,看看它和Java相比有没有神马优势。 阅读全文
posted @ 2012-03-20 11:02 O.C 阅读(4269) 评论(3) 推荐(3) 编辑