我有以下问题。这是我所拥有的一些类的简单示例(每个类都依赖于其他类)。
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)
我遇到的问题是断言始终为null,即使class1已被初始化。我所拥有的一个条件是我只希望创建每个类的一个实例。
任何人都可以建议确保断言通过的最佳方法。
答案 0 :(得分:0)
class1
为空:
class3 = new Class3(class1);
自然,断言失败了。在尝试将class1传递给Class3
构造函数之前,需要实例化class1。
现在,由于您有循环引用,因此实现起来并非易事。因此,您需要首先创建对象,然后修复引用。将构造与对其他对象的引用赋值分离。
此外,您不应将对象实例命名为class
,因为它们是对象而不是类。区别很重要。
答案 1 :(得分:0)
在创建类时,class1未初始化为其对象,此类的实例为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)
答案 2 :(得分:0)
最初,class1变量是一个空指针。然后为其分配一些值,引用更改。但是class3.class1仍然指向null。
您需要确保引用不会更改,但它指向的值会更改。