2011-06-12 79 views
0

我遇到以下问题。这是我拥有的一些类的简单示例(每个类都依赖于其他类)。在初始化之前将对象传入构造函数

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) 

我的问题是assert始终为空,即使class1已初始化。我所拥有的一个条件是,我只希望在那里创建每个类的一个实例。

任何人都可以建议最好的方法来确保断言通过。

class3 = new Class3(class1); 

所以很自然的断言失败:

回答

0

当创建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) 
0

class1当你打电话是空的。在尝试将它传递给构造函数Class3之前,您需要实例化class1。

现在,这不是微不足道的实现,因为你有循环引用。因此,您需要首先创建对象,然后修复引用。将构建与其他对象的引用分配分开。

更重要的是,您不应该命名对象实例class,因为它们是对象而不是类。区别很重要。

0

最初Class1的变量是空指针。然后你给它分配一些值并且参考的变化。但是class3.class1仍然指向null。

您需要确保引用不会更改,但它指向的值会发生更改。

+0

你的意思是参考而不是指针我认为 – 2011-06-12 15:51:09

+0

是的@David我忘了单词引用和使用似乎不明确的指针。我正在修改:P – 2011-06-12 15:59:34