0

在 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,这是我不希望发生的

4

2 回答 2

1
myBar.Foo = myFoo;

myFoo = null

myFoo = null不会使myBar.Foo无效。它仍将引用旧对象。

字段可以ref在 chsarp 中,并且无法绕过这一点。可以在这里找到更好的解释 -如何通过“引用”分配给 c# 中的类字段?

于 2013-01-12T22:29:45.957 回答
0

您似乎想要的东西是不可能的,至少直接是不可能的。我将在这里向其他读者描述我认为您想要什么,因为“迁移”一词是非标准且令人困惑的。

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

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

于 2013-01-12T22:43:02.190 回答