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

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


第二个:

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


第二个代码段是否确实是危险的,因为x现在具有对该本地y的引用,因此在退出foo后可能已经失效了?

为什么我们通常必须使用“新”?

我有点困惑,因为在C ++中,如果第二个片段中的x是指针,则由于x = y不是指针,所以语句y甚至不会编译。

最佳答案

我认为您的困惑是,在C ++中,第二个示例将返回对堆栈分配对象的引用。这在C#中不会发生。

给定您在C#中的第二个示例:

public void foo(out classA x)
{
  classA y;  // Doesn't allocate an object
  x = y;
}


无论如何,这可能不会编译,因为y从未分配值。

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

10-13 06:01