如何在当前对象中保持对另一个对象的引用
本文关键字:一个对象 引用 对象 | 更新日期: 2023-09-27 18:03:19
我知道通过使用ref
关键字可以在方法中引用另一个对象。在方法内部创建的对象也可以在方法外部使用。
public Method(ref OtherClass input)
{
input = new OtherClass();
}
但是我需要提前一步。我需要在我的对象中保存引用作为属性,并在将来的其他方法中随时更改原始对象。
public class CLass1
{
OtherClass _input;
public Bind(ref OtherClass input)
{
input = new OtherClass(); // instantiating the object
_input = input; // keeping a reference of the created object for later usage!
}
public void Unbind()
{
_input = null;
}
}
当我Bind
对象时,原始对象初始化为一个新对象,这正是我想要的。但是在那之后,我运行Unbind()
,只有_ input
变成空,input
保持不变。我需要input
也变成null !这怎么可能呢?
这是不可能做的事情,你正在问,但你可以实现的功能,如果你包装你的OtherClass与WrapperClass
public class WrapperClass
{
public OtherClass Input;
}
public class CLass1
{
WrapperClass _wrapper;
public Bind(ref WrapperClass wrapper)
{
wrapper = new WrapperClass();
wrapper.Input = new OtherClass(); // instantiating the object
_wrapper = wrapper; // keeping a reference of the created object for later usage!
}
public void Unbind()
{
_wrapper.Input= null;
}
}
public abstract class SelfRefType
<T extends< SelfRefType<T>> {
private OtherType<T>_ref;
protected abstract T getThis();
public void set() {
_ref.m( getThis() ); }
}
public interface OtherType<E> {
void m(E arg);
}
public Subtype extends
SellfRefType<Subtype> {
protected Subtype getThis() {
return this; }
}
这不起作用,因为ref
仅作为方法的参数才有意义。您不能在方法范围之外存储引用,因为您不知道通过引用传递给方法的变量的范围。例如,想想如果你这样做会发生什么:
class WithRef {
// Imagine you can do this
public ref OtherClass other;
public WithRef(ref OtherClass other) {
this.other = other;
}
}
现在假设你这样做:
WithRef MakeRef() {
OtherObject variable;
return new WithRef(ref variable);
}
void Test() {
var invalid = MakeRef();
}
此时,invalid
在MakeRef
方法中引用了一个局部变量,这超出了作用域。