以下两个代码段之间有什么区别?
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/