c# - 为什么 ref 参数类型与常规类型不同?

标签 c# .net reflection language-design pass-by-reference

我了解如何在这两种不同类型之间切换,但我的问题是;为什么这种差异在类型级别

我原以为它会是 ParamterInfo 的属性对象,而不是单独的特殊类型。

假设它在反射中作为单独的类型呈现,因为它在内部是这样的,那么将其作为单独的类型有哪些语言优势(我猜想更简单的方法重载解析或其他东西)?

类似地,为什么 ref 是一个不同的类型而 out 不是(我想不出 ref 的原因> 作为一个单独的类型,不适用于 out)?

最佳答案

ref 参数具有不同的类型,因为 ref 类型在除参数之外的其他上下文中也被允许并且有用。 C# 不允许,但其他语言(至少 C++/CLI)支持,例如,引用类型的局部变量。这样的事情对于 ref 是有意义的,但对于 out 则不是。

假设 C# 允许它,您可以编写(IL 支持它):

int x = 3;
ref int y = x;
y = 4;
if (x == 4)
    MessageBox.Show("x is 4");

这不是它何时有用的示例,但在 ref 参数有用的相同情况下,使用辅助类或带有 ref 字段的结构。

关于c# - 为什么 ref 参数类型与常规类型不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8892372/

相关文章:

c# - 通过套接字动态调用方法

c# - 如何将结构的实例分配给包含该结构的类?

c# - 为什么写入class.cs文件时 'Request'这个名字不存在?

c# - Avalon UI 绑定(bind)错误 "Could not find CLR property"

c# - 在后面的 UserControl 代码中获取依赖属性值

java - 如何通过类在java中获取常量

java - 是mockito使用反射api来模拟对象

c# - 当 ThreadPool 中的事件线程数大于 ThreadPool.GetMinThreads() 时启动任务

c# - 仅垂直折叠文本框 - 如果它被隐藏,则获取实际高度

.net - 多个连接到一个 mdf 文件