对象引用哪些对象无法迁移到

时间:2013-01-12 21:41:02

标签: c# reference

在c#中我想知道是否有任何方法可以让引用不允许其引用迁移到引用。这里有一些 FAKE c#代码来说明我的意思:

class foo  {}

class bar
{
    public locked foo Foo; //of course locked doesn't actually exist
}

void main()
{
    foo myFoo = new foo();
    bar myBar == new bar();
    myBar.Foo = myFoo;

    myFoo = null

    if (myBar.Foo == null)
    {
        println("foo = null");
    }
}

//will print "foo = null"

显然这不会编译,当你删除foo时,它只会迁移到myBar.Foo,我不想发生这种情况

2 个答案:

答案 0 :(得分:1)

myBar.Foo = myFoo;

myFoo = null

执行myFoo = null不会使myBar.Foo为空。它仍将引用旧对象。

chsarp中的字段可以是ref,并且没有解决这个问题。可以在此处找到更好的解释 - How do I assign by "reference" to a class field in c#?

答案 1 :(得分:0)

你似乎想要的东西是不可能的,至少是直接的。我将在这里描述我认为你想要的其他读者,因为术语“迁移”是非标准和令人困惑的。

让我们描述myBar.Foo = myFoo正在做什么。它表示Foo上名为myBar的存储位置指向当前占用本地myFoo中存储位置的对象。您似乎想要的是myBar.Foo充当存储位置myFoo的别名(即另一个名称)。

Eric Lippert对here发布的类似问题有一个很好的答案,它解释了为什么不允许这样做以及做什么。他描述了什么有时被称为“镜头”,一种将getter和setter方法捕获到单个对象中并将引用传递给它的构造。