问题描述
|
我有以下问题。这是我拥有的某些类的简单示例(每个类都依赖于其他类)。
public Class1()
{
public Class1(Class2 class2)
{
}
}
public Class2()
{
public Class2(Class3 class3)
{
}
}
public Class3()
{
public Class1 class1;
public Class3(Class1 class1)
{
this.class1 = class1;
}
}
然后,我有以下代码初始化对象。
Class1 class1 = null;
Class2 class2 = null;
Class3 class3 = null;
class3 = new Class3(class1);
class2 = new Class2(class3);
class1 = new Class1(class2);
Assert.IsNotNull(class3.class1)
我的问题是,即使class1已被初始化,该assert始终为null。我确实有一个条件是,我只希望每个类创建一个实例。
任何人都可以建议确保断言通过的最佳方法。
解决方法
创建class3时,class1未初始化为其对象,因此class3的实例为null。
通过此测试的正确方法是:
Class1 class1 = null;
Class2 class2 = null;
Class3 class3 = null;
class1 = new Class1();
class3 = new Class3(class1);
class2 = new Class2(class3);
class1.Class3 = class3;
Assert.IsNotNull(class3.class1)
, 呼叫时,class1
为null:
class3 = new Class3(class1);
因此,断言自然会失败。您需要实例化class1,然后再尝试将其传递给.5ѭ构造函数。
现在,由于您有循环引用,因此这并非易事。因此,您需要做的是先创建对象,然后修复引用。将构造与引用对其他对象的分配分离。
此外,您不应命名对象实例class
,因为它们是对象而不是类。区别很重要。
, 最初,class1变量是空指针。然后,给它分配一些值,参考值将更改。但是class3.class1仍然指向null。
您需要确保引用不变,但它指向的值会改变。