在他的一个blogs Eric Lippert中说:
最后,CLR确实允许“ref return types”;理论上你可以使用一个方法“ref int M(){...}”返回对整数变量的引用。如果出于某种奇怪的原因我们决定在C#中允许这样做
VB或F#是否支持此功能?我正在考虑各种方法来进行强类型属性集合,而不使用反射...
更新:从C#7起支持此功能。
答案 0 :(得分:0)
根据Eric Lippet的说法 - C#确实支持此功能。
完全可以创建一个支持两者的C#版本 这些功能。然后你可以做像
这样的事情
static ref int Max(ref int x, ref int y)
{
if (x > y)
return ref x;
else
return ref y;
}
然后用
调用它
int a = 123;
int b = 456;
ref int c = ref Max(ref a, ref b);
c += 100;
Console.WriteLine(b); // 556!
您可以阅读更多有关C#中返回引用类型的问题的答案:
Why doesn't C# support the return of references?
至于你关于VB的问题 - 语言不支持它:
按参考方式返回?
虽然函数可以通过引用传递变量,但它们无法返回 他们那样。函数返回时,其局部变量不会 已经存在(或者如果它们是堆分配的,则正在等待清理)。 因此,函数总是按值返回;因为当地人 变量没有有效的内存地址,没有任何 变量引用返回。
当你从一个函数返回一个对象时,把它们放在一起, 唯一复制的是对象的地址。当你 从函数返回值类型,值本身被复制。
这意味着引用类型本质上是值类型,其中 value是堆上对象的内存地址(或Nothing)
来源:VB.NET, Is Object Returned by Reference from Function
我找不到F#的相同信息,但我猜它会和VB一样 - 所以答案 - 你不能在F#中返回ref。