超级实用的一种类型——匿名类型
既然说到匿名范例超等适用,得要找到场景来压服一下,假如人人玩过php,外面有一个全能的联系关系数组array,任你在联系关系数组array外面怎样写,均可以或许用json_encode来天生json,异常异常的便利。
http://www.top388.com/jianzhanjingyan/20160715103844.html
看到如许的json是不是有一种很爽的感到?是的,确其实咱们开辟中异常的适用,那末成绩来了,这么适用器械,它的道理在哪里可以或许学获得?
不看IL还好,一看真是吓一跳,就一句话的工作,酿成IL后就有这么多的玩意。。。并且类名获得也是异常奇葩,开首竟然有<>这类尖括号,固然这么写的缘故原由很简略,便是防止咱们界说的类名与自动天生的相抵触,再说编译器也不容许用<>开首的类名,固然在CLR层面是容许的,好了,
咱们继承往上面,从IL上咱们还发明了
http://www.020nfnk.com/xin2/2003.html
两个模板参数:<Age>j__TPar 和 <Name>j__TPar。
两个字段:<Age>i__Field 和<Name>i__Field。
两个属性办法:get_Name和get_Age,这里咱们发明并无set_Name和set_Age办法,也就阐明该属性是个只读属性。可以或许看到,当范例中有泛型参数的参加,IL代码就变得异常丢脸并且轻易混杂,不外可以或许找到几个症结指令,在重写object的equals办法以后,
匿名范例中比拟相称的办法是采纳一一字段比拟的,这就跟值范例的比拟方法很相似了,既然是一一比拟,那末上面的两个匿名工具应该是相称的。
这个在援用范例中是不可想象的。
不外风趣的是,这时咱们再来看看IL代码,发明并无天生两个匿名类,而是json和json2专用一个匿名类,这个利益便是削减了IL的指令量,
可以或许说编译器照样异常智能的,可以或许将资本优化到最好。