对象不能迁移到的对象引用

本文关键字:对象引用 迁移 不能 对象 | 更新日期: 2023-09-27 17:52:47

在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,我不想这样

对象不能迁移到的对象引用

myBar.Foo = myFoo;
myFoo = null

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

字段在chsarp中可以是ref,并且没有绕过这一点。更好的解释可以在这里找到-我如何通过"参考"分配;到c#中的类字段?

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

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

Eric Lippert对一个类似的问题有一个很好的回答,他描述了为什么不允许这样做,以及应该怎么做。他描述了一种有时被称为"透镜"的构造,它将getter和setter方法捕获到单个对象中,并传递对该对象的引用。