值类型有Type对象吗?
本文关键字:对象 Type 类型 | 更新日期: 2023-09-27 17:49:15
我确定标题是否具有解释性,但我需要一些帮助来理解这个概念。
我们有一个类(引用类型),它的方法表与Type对象相关联。除了方法表之外,type对象还包含所有的静态字段、type obj指针和同步块索引。
CLR在调用引用类型实例上的方法时引用这个方法表。
方法表包含用于更改实例字段状态的特定方法的IL。
同样,我们可以为结构体(值类型)定义方法。
在运行时,当在值类型上调用方法时,CLR从哪里引用在值类型实例上调用的方法的IL
struct A
{
// for Immutability of value type
public readonly int a;
public void MethodOnValueType()
{
// Some code here
}
}
CLR指的是在哪里找到名为"MethodOnValueType"的方法的IL ?
是否有任何类型对象的值类型在托管堆?
我确定是引用类型的情况,但对值类型感到困惑。
谢谢。
值类型上的方法不支持多态性(从object继承的方法除外,这些方法的执行取决于它们是否被覆盖):该调用是静态调用(而不是虚拟调用)。基本上,调用信息的"什么方法"部分由编译器解析并刻录到IL中。然后JIT的工作是将该调用连接到最终的方法代码。
值类型没有对象头等。
您可以获得值类型的Type对象,但这与方法调用无关。
值类型有Type
对象,就像类一样。
Type intType1 = typeof(int);
Type intType2 = 100.GetType();
Debug.Assert(ReferenceEquals(intType1, intType2));
对非虚方法的分派对于结构和类来说本质上是一样的。
虚方法涉及在v-table中进行查找,这是引用类型的属性。如果声明了一个定义了接口的结构体,然后通过该接口调用该结构体,则该结构体将被自动装箱为引用类型,以便可以调用该虚成员。
希望能有所帮助。