gpt4 book ai didi

c# - 像 binaryWriter.Write((byte)67) 这样的东西是否涉及运行时转换?

转载 作者:太空宇宙 更新时间:2023-11-03 12:46:04 26 4
gpt4 key购买 nike

由于没有后缀来指示字节文字并且您必须使用强制转换(或分配给字节变量),我使用以下代码来确保改用 Write(byte) 重载写入(整数):

binaryWriter.Write((byte)67)

而且我想知道编译后的代码是否会在运行时实际执行该转换,或者编译后的 IL 是否具有等同于字节文字后缀的东西,或者具体说明使用了哪个方法重载?

最佳答案

要回答此类问题,最简单的方法就是查看生成的 IL 代码:

ldc.i4.s     67
callvirt instance void [mscorlib]System.IO.BinaryWriter::Write(unsigned int8)

首先使用短格式(适用于 -128 到 127 之间的整数)将您的文字作为 int32 堆栈。如果您只声明字节变量并使用它,这正是会发生的情况。不要让“as int32”让您感到困惑 - 您不能将单个字节压入堆栈,因此它总是压入至少 4 个字节(ldc.i4 系列指令)。

第二次调用正确的过载。

现在如果我们不转换为 byte 会发生什么?

ldc.i4.s     67
callvirt instance void [mscorlib]System.IO.BinaryWriter::Write(int32)

第一条指令完全相同,然后只是调用了另一个重载。所以你的问题的答案是:没有执行任何类型转换,编译器只是明确说明要使用哪个重载。

关于c# - 像 binaryWriter.Write((byte)67) 这样的东西是否涉及运行时转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37247700/

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