Castclass OpCode是否必要?

时间:2014-10-30 19:19:20

标签: c# .net reflection.emit il

CLR允许我设置带有对象引用的字段,无论是否执行了Castclass操作。如果确定堆栈顶部的对象引用是否为复制类型,是否可以设置字段?如果是这样,这是否意味着Castclass是编译器使用的安全功能?

1 个答案:

答案 0 :(得分:0)

编写CIL时,可以用虚拟堆栈基本语言编写,而不是OOP语言。

Castclass是一个可选的操作码,用于确保引用地址是你想要的类,因为在CIL中一切都很容易搞乱。

这是一个例子,我只是将变量A从CA类型更改为CB类型,将库存实例CB从B更改为A(类似于您在http://pastebin.com/U1fuH5vC中完成的内容)。

.method public static void  Swap(class TestOOP.Module1/CA& A,
                                 class TestOOP.Module1/CB& B) cil managed
{
    .maxstack 2

    ldarg.0
    ldarg.1
    ldind.ref
    stind.ref

    ret
}