为什么C#不支持返回引用?
|
我已经读过.NET支持返回引用,但是C#不支持。有特殊原因吗?为什么我不能做这样的事情:
static ref int Max(ref int x, ref int y)
{
if (x > y)
return ref x;
else
return ref y;
}
没有找到相关结果
已邀请:
4 个回复
布埃郝卞簿
然后用
我凭经验知道可以构建支持这些功能的C#版本,因为我已经这样做了。高级程序员,特别是那些移植非托管C ++代码的人们,经常要求我们提供更多类似于C ++的能力,以使用引用进行操作,而不必费心去使用指针和固定内存。通过使用托管引用,您可以获得这些好处,而无需付出破坏垃圾收集性能的代价。 我们已经考虑了此功能,并实际实施了足够的功能以展示给其他内部团队以获取他们的反馈。但是,根据我们的研究,目前我们认为该功能没有足够广泛的吸引力或令人信服的使用案例,无法使其真正成为受支持的语言功能。我们还有其他更高的优先级以及有限的时间和精力,因此我们不会在不久的将来实现此功能。 同样,正确执行此操作将需要对CLR进行一些更改。目前,CLR将引用返回方法视为合法但无法验证,因为我们没有检测到这种情况的检测器:
M3返回M2的局部变量的内容,但是该变量的生命周期已经结束!可以编写一个检测器,该检测器确定使用明显不违反堆栈安全性的引用返回。我们要做的就是编写一个这样的检测器,如果检测器不能证明堆栈的安全性,那么我们将不允许在程序的那部分使用ref返回。这样做并不是大量的开发工作,但要确保我们确实掌握了所有情况,对测试团队来说是沉重的负担。这只是将功能成本增加到目前收益不会超过成本的另一件事。 如果您能为我描述为什么要使用此功能,我将非常感谢。我们从真实客户那里获得的关于他们为什么想要的信息越多,有一天它越有可能将其纳入产品。这是一个可爱的小功能,如果有足够的兴趣,我希望能够以某种方式将其提供给客户。 (另请参阅相关问题,是否有可能在C#中返回对变量的引用?并且可以在C ++之类的C#函数中使用引用吗?)
氏脑
现在创建该结构的数组:
在这种情况下,数组索引器“ 6”将返回对struct的引用。不可能编写具有相同的“返回引用”行为的自己的索引器(例如,用于自定义集合)。 我没有设计C#语言,所以我不知道不支持C#的所有原因,但是我认为简短的答案可能是:没有它,我们可以相处得很好。
癸痊醒
蹦吃舷弦