gpt4 book ai didi

C# 输出参数

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:17 24 4
gpt4 key购买 nike

以下两个代码片段有什么区别?

public void foo(out classA x)
{
y = new classA();
x = y;
}

第二个:
public void foo(out classA x)
{
classA y;
x = y;
}

第二个片段是不是很危险,因为 x现在引用了这个本地 y ,在退出 foo 后可能已经死了?

为什么我们通常必须使用"new"?

我有点困惑,因为在 C++ 中,如果 x在第二个片段中将是一个指针,语句 x = yy 开始甚至无法编译不是指针。

最佳答案

让我们假设第二个片段是

public void foo(out classA x)
{
classA y = new classA();
x = y;
}

您编写的代码段根本无法在 C# 中编译。 y必须先分配。行 classA y;不创建 classA 的实例在堆栈上,就像在 C++ 中一样。它只是声明了一个变量 y类型 classA .

考虑到编译片段,分配 out本地声明和初始化的对象的变量在任何方面都没有危险。 classA对象 y指向并分配给 x直到 x在任何声明/使用的地方都超出了范围。

关于C# 输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7476267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com