是否有办法让函数返回对某些内部数据的可编辑引用。这是一个例子,我希望能帮助表明我的意思。
class foo
{
public int value;
}
class bar
{
bar()
{
m_foo = new foo();
m_foo.value = 42;
}
private m_foo;
foo getFoo(){return m_foo;}
}
class main
{
int main()
{
bar b = new bar();
b.getFoo().value = 37;
}
}
根据“==”返回getFoo()与内部m_foo相同,直到我尝试编辑它。在c / c ++中,我会返回一个引用或指针。
答案 0 :(得分:2)
实际上,经过一些清理后,您的代码示例确实证明了当您为值分配37时,您也正在更改bar的interman m_foo。所以答案是,你的函数返回一个引用类型。现在,也许你真正的代码是不同的,它返回的不是引用类型,而是int,值类型或字符串,一种特殊的野兽......
using System;
namespace ConsoleApplication1
{
public class foo
{
public int value;
};
public class bar
{
public bar()
{
m_foo = new foo();
m_foo.value = 42;
}
private foo m_foo;
public foo getFoo() { return m_foo; }
};
public class Program
{
public static int Main()
{
bar b = new bar();
b.getFoo().value = 37;
return 0;
}
};
}
有关参考值与值类型的更多信息: http://www.albahari.com/valuevsreftypes.aspx
答案 1 :(得分:0)
您已经在foo
中返回getFoo
的引用(默认情况下会发生这种情况)。因此,您对getFoo
的返回值所做的任何更改都将反映在foo
的内部bar
数据结构中。
答案 2 :(得分:0)
您想要使用此属性
class bar
{
private m_foo;
bar()
{
m_foo = new foo();
m_foo.value = 42;
}
foo Foo
{
get { return m_foo;}
}
}
答案 3 :(得分:0)
诅咒。我将弄清楚如何将我的非工作代码简化为一个实际中断的示例。对不起傻瓜。