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