在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,我不想发生这种情况
答案 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方法捕获到单个对象中并将引用传递给它的构造。