2011-06-12 5 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) 

문제는 클래스 1이 초기화 되었더라도 어설 션이 항상 null이라는 것입니다. 내가 가지고있는 조건 중 하나는 각 클래스의 인스턴스가 하나만 생성되기를 바랄뿐입니다.

누구든지 어설 션이 통과하는 가장 좋은 방법을 조언 할 수 있습니다.

class3 = new Class3(class1); 

그래서 자연스럽게 주장이 실패 : 전화

답변

0

class3은 class3이 생성 될 때 해당 객체로 초기화되지 않으므로 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은 null입니다. 클래스 1을 Class3 생성자에 전달하기 전에 클래스 1을 인스턴스화해야합니다.

이제 순환 참조가 있으므로 달성하기가 쉽지 않습니다. 그러므로 먼저 객체를 생성 한 다음 참조를 수정해야합니다. 다른 개체에 대한 참조 지정에서 구성을 분리합니다.

오브젝트 인스턴스가 클래스가 아닌 객체이므로 class의 이름을 지정하면 안됩니다. 구별이 중요합니다.

0

처음에는 Class1의 변수가 널 포인터이다. 그런 다음 어떤 값을 지정하면 참조 변경됩니다. 그러나 class3.class1은 여전히 ​​null을 가리 킵니다.

참조가 변경되지 않지만 참조가 변경되는 값을 변경해야합니다.

+0

당신은 포인터가 아닌 포인터를 생각합니다. –

+0

예 @David 난 모호한 단어 참조 및 포인터를 사용하는 것을 잊어 버렸습니다. 그것을 고치고있다 : P –

관련 문제