相关疑难解决方法(0)

CLR在调用struct的方法时如何工作

我想我已经知道了一堂课的答案,只想确认我的理解是正确的.假设我有一个ClassA名为的实例a.何时a.MethodA()被调用:

(1)CLR找到的类型ClassA由所述类型的指针a在堆(类型已经装载到堆)

(2)MethodA在类型中找到,如果没有找到,则转到它的基类型,直到object上课.

也许我的理解不太准确,但我认为这是基本正确的(纠正我,如果它是错的!).这是一个简单结构的问题.

struct MyStruct
{
   public void MethodA() { }
}
Run Code Online (Sandbox Code Playgroud)

我有var x = new MyStruct();,它的值在堆栈上,并且MyStruct已经加载到堆中的类型.执行时x.MethodA(),当然没有拳击.CLR如何找到MethodA并获取IL并执行/ JIT呢?我想答案可能是:(再次,如果我错了,请纠正我)

(1)我们有声明类型x堆栈上.CLR通过堆栈上的信息找到它的类型,并MethodA在其类型中查找.- 让我们来称呼它assumptionA.

如果你告诉我我assumptionA是对的,我会很高兴的.但即使它是错的,它也说明了一个事实:CLR有一种方法可以在没有装箱的情况下找到结构类型.

现在怎么样x.ToString()还是x.GetType()?我们知道该值将被加框,然后它将像一个类一样执行.但为什么我们需要拳击呢?既然我们可以得到它的类型(假设A告诉我们),为什么不去它的基类型并找到方法(就像一个类)?为什么这里需要昂贵的箱子操作?

.net c# clr il value-type

7
推荐指数
1
解决办法
2253
查看次数

标签 统计

.net ×1

c# ×1

clr ×1

il ×1

value-type ×1