什么都不返回或返回void – C#在void Function()调用结束时究竟
考虑以下C#函数:
void DoWork() { ... } C#文档说明:
这似乎是直截了当的,在大多数情况下,这适合作为公平的定义. 然而,对于许多较低级语言(即C),“void”具有略微不同的含义.具体来说,所有代码块都必须返回一些内容.因此,void是空指针的表示,它表示“无”.在这种情况下,您不需要在代码中包含return语句,因为任何不返回值的块语句都会自动返回空指针. 这是C#所做的,或者当调用void函数时,它是否执行一个代码块并返回,甚至没有包含void值的指针? 解决方法
首先,C#被编译成IL,因此JIT后的最终表示可能会有所不同.
使用void方法,IL中的方法签名将标记为void,并且ret操作码仍将存在.这意味着,从IL的角度来看,调用堆栈上的“返回”值可能存在也可能不存在,但它永远不会被复制并在调用站点上使用. ret操作码只会返回一个返回值(如果存在),并且这不需要存在于void返回方法中,因此在许多情况下,即使在低级概念角度,它也不会返回任何内容.
CLR中的情况并非如此. void方法可以真正返回任何内容,因为ret操作码不允许返回任何内容.见
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |