微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么方法在正常情况下只返回一种参数?

如何解决为什么方法在正常情况下只返回一种参数?

我在求职面试中遇到过这个问题,但我无法回答,之后也找不到答案。他们问我‘为什么在 C# 中的正常条件下方法只返回一种参数? (ref-out 是返回多个参数的额外方式。但这不是正常情况)'

-元组、列表、字典、分机。 => 毕竟它们只用于一种参数。

解决方法

“为什么方法在正常情况下只返回一种参数?”

因为微处理器的行为和汇编语言的历史。

在 OOP 中,例如在 C# 中,在类似 Intel 的计算机上,方法只不过是机器代码中的过程。

一个过程什么都不返回,什么都不带:它只是一个 goto、一个 jmp 或一个调用,它是第一代 CPU 的高级 jmp。

因此,为了创建 CPU CALL,发明了堆栈来传递参数以及获取结果 register 值(因此在高级语言中将其命名为函数)。

因此,当我们调用一个方法时,实际上(编译器为此生成机器代码),我们将每个参数的值和/或引用推入堆栈之前,每个参数只有平台寄存器的最大大小(x32 = 16 位和 x64 = 64 位 - 使用较少就像在多路道路上使用一种方式一样)。

在程序开始时,我们 POP 值(由编译器生成)。

在程序的机器码末尾,我们有一个 RET 汇编操作码/助记符指令。

如果需要返回值,那么在返回之前,它会被推送到堆栈中,以供调用者在我们返回该 POP 的地方使用。

使用 ref 关键字是传递过程直接使用的内存指针:我们推送一个指针,调用过程,弹出指针,使用它,RET,仅此而已,但不如使用 CPU 优化内部堆栈比外部存储器访问更快。

除此之外,使用C#的新特性返回元组,实际上返回的是指向内存匿名数据结构的指针(4或8字节),就像是类或结构对象的实例引用.当我们不想创建专用的类或结构时,它很有用...

这是进行编程的唯一方法,因为数学函数只返回一个值或一组值,在最后一种情况下,我们需要获取该集合,进行处理,而不是被这些值淹没.

因此,这个问题的基本答案来自数学科学的结构,特别是 set theorynumbers theory

.NET OpCodes Class

Stack register

The Concept of Stack and Its Usage in Microprocessors

Introduction of Stack based CPU Organization

What is the role of stack in a microprocessor?

为了更好地理解并提高您的计算技能,您可能会发现研究什么是 assembly language 以及 CPU 的工作原理很有趣。您可以从 ILmodern Intel 开始,但从过去的 8086 to i386/i486 开始可能更简单、更具形成性和互补性。

,

除了 Olivier Rogier 对机器代码中语言实现的回答之外,还要考虑如何在语言中使用方法调用。例如:

x = 2 * (someMethod() + 1)

如果 someMethod 可以返回多个值,该表达式中应该使用哪一个?如果您的回答是“该语言可能要求您在调用站点说出哪一个”,那么恭喜,这就是元组的工作方式 - 您返回一个包含多个组件的值(一个元组),而不是返回多个值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。