摘要: 首先是删除了对LINQ的特殊支持,因为LINQ与普通的扩展方法没有什么不同,并将lambda的功能扩展到支持所有方法的参数中。同时有发现了一个lambda的变形,它将方法的局部参数变为内联类型的字段,然后在构造lambda时直接用内联类型的方法代替匿名方法,例如List.RemoveAll(),对策 阅读全文
posted @ 2021-03-15 10:01 ccddnet 阅读(89) 评论(1) 推荐(1)
摘要: C#博大精深的语法糖已经让我不寒而栗了,后面不知还有多少个新语法糖在等着。目前,解析的基本工作虽已完善,但因是靠特征来解析,而参考目标是VS的生成器,所以还会有大量未知的情况会造成解析错误,这只能靠时间来解决。 先详细说说dynamic的解析原理。System.Runtime.CompilerSer 阅读全文
posted @ 2021-01-20 13:07 ccddnet 阅读(114) 评论(0) 推荐(0)
摘要: 解析LINQ前,还需要解决一个障碍,那就是??这个符号,这是语法糖之一,它表示如果一个对象为null时就会使用??后面的值,而且它会频繁出现在LINQ语句中,不信你可以用reflector测试看看。在这里我自定义了两个新的IL代码ternay和ifobjnullldotherelseldnull,前 阅读全文
posted @ 2020-12-31 03:23 ccddnet 阅读(132) 评论(0) 推荐(0)
摘要: 约束指的是泛型类型约束,就是where关键字。作为非科班出身的我来说,逆变协变这个东西真是头一次听说,看了下介绍才明白,以前打过交道,只是当时不知其名而已,又花了些时间,才搞懂如何反射它。类类型的里有个属性名为GenericParameterAttributes,看这个名字就知道了吧,但此属性有个前 阅读全文
posted @ 2020-12-02 15:42 ccddnet 阅读(103) 评论(0) 推荐(0)
摘要: 操作符与优先级是密不可分的,想想小学时的四则混合运算,如果想改变从左到右的优先级就需要加上括号,这一点实现起来并不难。在定义符号时预先定义其优先级,在符号拼接操作数时就可以与操作数的优先级(最后一个符号的优先级)相比较,如果需要则先拼接括号再拼接符号。 然而语法糖让操作符变得复杂了。+=、-=等等这 阅读全文
posted @ 2020-11-18 19:11 ccddnet 阅读(170) 评论(0) 推荐(0)
摘要: 曾有朋友问我为什么不使用现成的框架做流水工,我说那太没劲,抄来抄去的没有成就感,可实际情况是无桥可走,无处可抄,找不着能参考的代码,只能自己摸石头过河。就是这样一点一点的,时至今日已经一年多了,这个“软件”还处在遥遥无期的状态,如果有雇主的话,一定早就把我开除了吧。显然,造成现在局面的主要原因是我过 阅读全文
posted @ 2020-10-13 03:36 ccddnet 阅读(115) 评论(0) 推荐(0)
摘要: 最近诸事不顺,父母需要照顾,自己也病了一阵,时间太散了,没法静下心来思考,所以搁置了两个多月。言归正传,试着生成了一个debug版本,结果呵呵,大量的数组下标越界和空引用问题,显示出来的也驴唇不对马嘴,不过比较庆幸是对PE头和.net表及资源的解析没有大问题,只在格式上略有不足而已。 语法糖这个东西 阅读全文
posted @ 2020-08-21 00:58 ccddnet 阅读(166) 评论(0) 推荐(0)
摘要: 通过前文已经将IL代码分割成各种语句块,剩下的就是要把表达式语句实现了。这里需要对表达式充分的理解一下,每句IL代码都是有Opcode和Operand的,这些个Operand将会出现在表达式中,而Opcode则是表达式中的运算符,每个Operand之间都必须存在运算符。在C#中运算符一共有15级,所 阅读全文
posted @ 2020-06-27 23:18 ccddnet 阅读(148) 评论(0) 推荐(0)
摘要: 前不久,一位爱好汉化的朋友联系到我,他对自己有了些略高的要求,不止是汉化,还希望有更多……在我看来这种行为是有违道德的,但还是盛情难却,正好研究一下,然后集成进我的.Net RuntimeExplorer中。 BAML是XAML的二进制版本,没有明确的资料说明其格式,不过它并不神秘,使用reflec 阅读全文
posted @ 2020-06-12 22:03 ccddnet 阅读(2091) 评论(0) 推荐(1)
摘要: 本来已经结束这个话题,但在测试程序时又发现问题,只得改了又改。大体情况是这样,当if或while块中只有switch或多个if组成的switch时,switch块的出口位置变为if else块之后的位置或是while的continue位置,为什么会是这样?因为要效率,所以要免去了多余的跳转。 问题已 阅读全文
posted @ 2020-05-06 23:58 ccddnet 阅读(157) 评论(0) 推荐(0)