如何解决为什么方法在正常情况下只返回一种参数?
我在求职面试中遇到过这个问题,但我无法回答,之后也找不到答案。他们问我‘为什么在 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 theory 和 numbers theory。
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 的工作原理很有趣。您可以从 IL 和 modern Intel 开始,但从过去的 8086 to i386/i486 开始可能更简单、更具形成性和互补性。
,除了 Olivier Rogier 对机器代码中语言实现的回答之外,还要考虑如何在语言中使用方法调用。例如:
x = 2 * (someMethod() + 1)
如果 someMethod
可以返回多个值,该表达式中应该使用哪一个?如果您的回答是“该语言可能要求您在调用站点说出哪一个”,那么恭喜,这就是元组的工作方式 - 您返回一个包含多个组件的值(一个元组),而不是返回多个值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。