是否有任何.net语言支持返回ref类型

问题描述 投票:1回答:1

在他的一个blogs Eric Lippert说:

最后,CLR确实允许“ref return类型”;理论上你可以使用一个方法“ref int M(){...}”返回对整数变量的引用。如果由于某些奇怪的原因我们决定在C#中允许它

VB或F#都支持这个吗?我正在考虑各种方法来进行强类型属性集合,而不使用反射...

更新:从C#7开始,这是支持的。

.net clr
1个回答
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的问题 - 该语言不支持它:

返回参考?

虽然函数可以通过引用传递变量,但它们不能以这种方式返回它们。当函数返回时,它的局部变量不再存在(或者如果它们是堆分配的则是待处理的清理)。因此,函数总是按值返回;因为局部变量不再具有有效的内存地址,所以没有任何返回的变量引用。

总而言之,当您从函数返回对象时,唯一复制的是对象的地址。从函数返回值类型时,将复制值本身。

这意味着引用类型本质上是值类型,其中值是堆上对象的内存地址(或Nothing)

资料来源:VB.NET, Is Object Returned by Reference from Function

我找不到F#的相同信息,但我想它会和VB一样 - 所以答案 - 你不能在F#中返回ref。

© www.soinside.com 2019 - 2024. All rights reserved.