加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

什么都不返回或返回void – C#在void Function()调用结束时究竟

发布时间:2020-12-16 01:56:47 所属栏目:百科 来源:网络整理
导读:考虑以下C#函数: void DoWork(){ ...} C#文档说明: When used as the return type for a method,void specifies that the method does not return a value . 这似乎是直截了当的,在大多数情况下,这适合作为公平的定义. 然而,对于许多较低级语言(即C),“voi
考虑以下C#函数:

void DoWork()
{
    ...
}

C#文档说明:

When used as the return type for a method,void specifies that the method does not return a value.

这似乎是直截了当的,在大多数情况下,这适合作为公平的定义.

然而,对于许多较低级语言(即C),“void”具有略微不同的含义.具体来说,所有代码块都必须返回一些内容.因此,void是空指针的表示,它表示“无”.在这种情况下,您不需要在代码中包含return语句,因为任何不返回值的块语句都会自动返回空指针.

这是C#所做的,或者当调用void函数时,它是否执行一个代码块并返回,甚至没有包含void值的指针?

解决方法

首先,C#被编译成IL,因此JIT后的最终表示可能会有所不同.

使用void方法,IL中的方法签名将标记为void,并且ret操作码仍将存在.这意味着,从IL的角度来看,调用堆栈上的“返回”值可能存在也可能不存在,但它永远不会被复制并在调用站点上使用. ret操作码只会返回一个返回值(如果存在),并且这不需要存在于void返回方法中,因此在许多情况下,即使在低级概念角度,它也不会返回任何内容.

However,for many lower-level languages (i.e. C) “void” has a slightly different meaning. Specifically,all blocks of code must return something.

CLR中的情况并非如此. void方法可以真正返回任何内容,因为ret操作码不允许返回任何内容.见OpCodes.Ret

Returns from the current method,pushing a return value (if present) from the callee’s evaluation stack onto the caller’s evaluation stack.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读