所以我想要一个指向指针的指针。
我有一个在一个对象中更新的类。在另一个对象中,我想要引用原始类中对象的当前版本。这是我正在进行的简化版本。
Public Class Foo
'conaints information
End Class
Public Class myMainApp
Dim myHelper As HelperClass
Dim currentFoo As Foo
Private Sub init()
currentFoo = New Foo()
myHelper = New HelperClass(currentFoo)
End Sub
Private Sub UpdatingUI()
currentFoo = GetFooFromContext()
End Sub
Private Function GetFooFromContext() As Foo
Return New Foo()
End Function
End Class
Public Class HelperClass
Private myFoo As Foo
Public Sub New(ByVal aFoo As Foo)
myFoo = aFoo
End Sub
End Class
如果这是C ++,则currentFoo将是Foo *,而HelperClass的myFoo将是Foo **,因此每当我们更新currentFoo对新对象的引用时,HelperClass也将访问此新对象。
在.net世界中是否有语法来实现这一目标?
答案 0 :(得分:3)
没有直接相当于此。
最好的选择通常是让HelperClass实际保留对主类的引用,并根据需要从主类的属性读/写Foo。这样,它引用了持有 Foo的类,而不是Foo本身。但是,这仍然不一样,因为如果你更改主类“Foo”实例,你将失去对原始的引用(除非你已经保存了它)。
答案 1 :(得分:1)
Reed的答案是典型的惯用C#方式来处理这个问题,但如果你真的想要它,你可以随时介绍自己的“参考包装”助手类:
public class Reference<T> where T : class
{
public T Value { get; set; }
}
然后将currentFoo
和myFoo
都声明为Reference<Foo>
,同时确保currentFoo
为readonly
,这样任何人都无法指定不同的Reference
{{1}}到它。
答案 2 :(得分:0)
是的,您可以使用不安全的代码完成您在C#中的思考 - 但严重,不。
主要是我只是想强调这个问题的 omg-not-do-that 方面; - )
答案 3 :(得分:0)
您需要共享对具有Foo属性的类的引用。抱歉写在C#; - )
class MyMainApp
{
private HelperClass myHelper;
private FooBar myFooBar;
public void Init()
{
myFooBar=new FooBar(new Foo());
myHelper=new HelperClass(myFooBar);
}
public void UpdateFromUI()
{
myFooBar.CurrentFoo = GetFooFromContext();
myHelper.DoSomethingWithTheFoo();
}
private Foo GetFooFromContext()
{
return new Foo();
}
}
class FooBar
{
public Foo CurrentFoo;
public FooBar(Foo new_foo)
{
CurrentFoo = new_foo;
}
}
class HelperClass
{
private FooBar myFooBar;
public HelperClass(FooBar new_foobar)
{
myFooBar = new_foobar;
}
public void DoSomethingWithTheFoo()
{
myFooBar.CurrentFoo.JumpThroughHoop();
}
}
class Foo
{
public void JumpThroughHoop()
{}
}