着急的同学可以直接看结果。。
起因
书上说获取TypeInfo对象会强迫CLR确保已加载类型的定义程序集,从而对类型进行解析。这个操作可能代价高昂。如果只需要类型引用(Type对象),就应避免这个操作。
因为好奇TypeInfo()函数和GetType()函数都做了什么,于是用IL DASM看了一下,然后发现GetType函数里出现了奇怪的东西。。
.method public hidebysig instance class System.Type
GetType() cil managed internalcall
{
.custom instance void System.Security.SecuritySafeCriticalAttribute::.ctor() = ( 01 00 00 00 )
.custom instance void __DynamicallyInvokableAttribute::.ctor() = ( 01 00 00 00 )
} // end of method Object::GetType
经过
.ctor() = (10 00 00 00) 函数后面居然还能这么带参数的?
于是分别用bing 和 google贴上这个代码查了一下,出现了C#的内容但是没有想要的,有些网页里有这个代码,但是大家好像都知道这个是什么,很熟练地都没有解释。。于是未果。。
只好用百度试试,然后出现了excel什么乱七八糟的东西。。
于是曲线救国,google搜了一下how to learn msil
stackoverflow有人推荐看ECMA规范
再在pdf里面搜一下代码..
结果
定制属性用指令.custom声明,指令紧跟着类型构造器的函数声明,函数声明后面是可选的位于括号内的字节。
CustomDecl ::=
Ctor [ ‘=’ ‘(’ Bytes ‘)’ ]
.custom instance void myAttribute::.ctor(bool, bool) = ( 01 00 00 01 00 00 )
如果构造器需要参数,它们的值在Bytes中指定。参数的格式在规范的第293页。
也就是.ctor() = (10 00 00 00) 后面带参数是专门用于定制特性的。
144

被折叠的 条评论
为什么被折叠?



