我了解如何在这两种不同类型之间切换,但我的问题是;为什么这种差异在类型级别?
我原以为它会是 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/