如果没有填充到预期类型的声明变量中,则方法调用的返回值将转到哪里
本文关键字:返回值 调用 方法 填充 类型 声明 如果没有 变量 | 更新日期: 2023-09-27 18:19:28
我们不必将方法调用的返回值填充到预期类型的声明变量中,但在这种情况下会发生什么?
下面的返回值去了哪里/它发生了什么:?
decimal d = 5.5m;
Math.Round(d, MidpointRounding.AwayFromZero);
<小时>显然,如果我想查看方法调用的结果,我会执行以下操作:
decimal d = 5.5m;
decimal d2 = Math.Round(d, MidpointRounding.AwayFromZero); // Returns 6 into
// the variable "d2"
(这个问题不是特定于值类型,也包括引用类型)
小时>它从执行堆栈中弹出:
IL_000A: call System.Math.Round
IL_000F: pop
如果是引用类型,则引用将从堆栈中弹出,对象本身最终将由GC收集(假设它没有其他引用)。
在caller stack
上推送的方法的返回值。它会不会被使用,是caller
的代码问题。
编辑
示例:
void Main()
{
var result = MyCoolFunc(10, 20); {1}
}
int MyCoolFunc(int prm1, int prm2)
{
return (prm1 + prm2);
}
一些VM的Pesudo示例,跳过初始代码
VM_PUSH 10 //prm1 stack state is {10}
VM_PUSH 20 //prm1 stack state is {10,20}
VM_EXEC MyCoolFunc //call function which executes what need, removes from stack those 2 values and pushes result of the function execution. stack state is {30}
如果我们不在第{1}var result
行上写入,则在这里结束,如果是应该有这样的
VM_ALLOC result //allocate space for result
VM_GETFROMSTACK // get content of the stack to result
虚拟机代码是伪代码,在现实生活中不存在。它只是用来举一个例子