定制特性 MISL表示

着急的同学可以直接看结果。。


起因

书上说获取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) 后面带参数是专门用于定制特性的。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值