您好我正在使用看起来像这样的代码。
class A
{
Custom objA;
public A()
{
//Assign some value to objA;
B obj = new B(objA);
}
}
class B
{
Custom objB;
public B(Custom obj)
{
this.objB = obj;
}
public void Func()
{
this.objB = null;
}
}
其中Custom
是自定义可空类型。
现在,据我所知,只要我调用objA
Func()
,就必须更新class B
以使值为null。然而,这不是正在发生的事情。
我在这里做错了吗?
答案 0 :(得分:3)
首先,在第5行,您有语法错误。如果您尝试创建B obj = new B(objA)
的新实例,则可以B
。但我只能猜测。
您尝试做的是修改objA
,方法是将其传递给类型为B
的新对象,将其存储在字段中,然后修改字段。问题是您存储的内容是对objA
的引用的副本。执行this.objB = null
后,您要修改字段objB
以获得新引用(null
),但您尚未对作为成员的字段objA
执行任何操作类A
的实例。
答案 1 :(得分:1)
在我看来,这是您在问题中询问的代码:
class A
{
Custom objCustom;
public A()
{
objCustom = new Custom();
B objB = new B(objCustom);
objB.Func();
}
}
class B
{
Custom objCustom;
public B(Custom objCustom)
{
this.objCustom = objCustom;
}
public void Func()
{
this.objCustom = null;
}
}
这会编译并具有相当一致的命名约定。
您在Custom objCustom
和A
类B
字段中遇到的问题是,即使他们在调用.Func()
之前都引用了同一个实例,需要了解Custom objCustom
字段只是对象的引用,而不是对象本身。因此,当您致电.Func()
时,您正在为Custom objCustom
中的objB
分配新的引用,但您在objA
中没有对引用做任何事情。它仍然指向原始对象。
答案 2 :(得分:0)
在函数Func
中,您将null
分配给B
对象(不是A
对象)的字段,因此在此函数之后调用objB
B
1}} object不指向Custom
类型的任何对象,但objA
对象的A
字段仍指向单个Custom
对象。
以下是代码示例,其中Func
将更改objA
对象的A
字段:
class A
{
public Custom objA = new Custom();
public A()
{
B obj = new B(this);
B.Func(); // after this, objA field will be null
}
}
class B
{
А obj;
public B(А obj)
{
this.obj = obj;
}
public void Func()
{
obj.objA = null;
}
}
另请注意:
A
对象时,其objA
字段为null
,因此在A
的构造函数中,您实际调用B obj = new B(null);
,因此其objB
1}}字段也是null
。A
对象后,将处置obj
类型的对象B
,因为您没有对其进行引用,因此您不会调用Func
你的例子中的函数。