返回在c#中编辑的引用的函数

时间:2008-11-12 02:54:06

标签: c#

是否有办法让函数返回对某些内部数据的可编辑引用。这是一个例子,我希望能帮助表明我的意思。

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 ++中,我会返回一个引用或指针。

4 个答案:

答案 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)

诅咒。我将弄清楚如何将我的非工作代码简化为一个实际中断的示例。对不起傻瓜。