gpt4 book ai didi

.net - .NET 中如何实现值类型

转载 作者:行者123 更新时间:2023-12-01 02:57:08 26 4
gpt4 key购买 nike

在网上环顾四周,找不到任何关于值类型实际实现方式的文章。

例如,Int32 是一个结构体,它的直接父级是 System.ValueType,而它的最终父级是 System.Object。对象是一个类 - 我想 ValueType 是一个类?

什么是类层次结构? CLR 必须扮演什么角色? CLR 在什么阶段以及如何知道将值类型分配给堆栈? (仅供引用,我知道值类型存储在声明它们的位置)。

最佳答案

烟雾和镜子是描述它的最佳方式。我会努力的更好。值类型不支持继承,不能有虚方法。但是,int 类型具有 ToString() 和 GetHashCode() 方法,这两种方法都是虚方法。它从 System.Object 继承它们。

这种魔法来自拳击转换。有专门的 IL 操作码来执行它,OpCodes.Box和 OpCodes.Constrained。这将值类型转换为对象,该对象存储原始值类型的值。反之亦然,拆箱将对象转换回值类型。

如果你有一个好的 .NET 编译器,比如 C# 编译器,你永远不会自己显式调用转换。编译器可以从语言语法中找出何时需要这种转换并发出所需的 IL 代码。

System.Int32 类型是编译器具有特殊知识的辅助类型。它仅对它的方法有用,您永远不会显式创建它的实例。当编译器知道您正在调用 int“类”的方法时,它会直接调用这些方法。

所有这些共同作用来创建 int 派生自 System.Object(通过 System.ValueType)的错觉。利用“如果它看起来像鸭子,像鸭子一样游泳和嘎嘎叫,它就是鸭子”的原则。

关于.net - .NET 中如何实现值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2528855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com