2016-06-05 2 views
0

그 클래스의 멤버 필드를 가진 클래스를 정의 할 수있는 것은 이상한 것처럼 보입니다.동일한 클래스의 필드가있는 클래스를 정의합니다. 자체 참조가있는 클래스?

public class Person 
{ 
    public string Name { get; set; } 
    public Person Spouse { get; set; } 
} 

는 지금은 그 클래스를 호출하는 경우 :

var jane = new Person(); 
var jim = new Person(); 
jane.Spouse = jim; 
jim.Spouse.Spouse = jane; 

마지막 줄은 오류가 발생합니다. 하지만 짐이 무엇인지 이미징하는데 어려움이 있습니다. 배우자. 배우자 전화가하고 있습니다. 그것은 jim.spouse 먼저 오류를 일으킬 그래서 null을 평가해야합니까? 내가 짐을 주장한다면. 배우 = 제인이 먼저 작동해야합니까? 하지만 제 말은 본질적으로 제인입니다. 배우자 = 제인.

클래스에 동일한 유형의 필드가있는 경우 클래스에 대해 무엇을하고 있습니까? 그것은 단지 클래스의 두 인스턴스가 관계를 가질 수 있도록 허용합니까? 클래스 자체를 참조하므로 클래스 자체가 상속됩니까? 나는 다소 혼란스럽고 이것이 나쁜 행동인지 궁금해합니다.

+0

답이 맞으면 체크 표시를 눌러 표시해야합니다. 아직하지 않으 셨으므로 [투어]를 통해 SO의 작동 방식에 대한 세부 정보를 확인하십시오. 받아 들여지고 upvoted 답변은 다른 사람들이 좋은 답변을 찾을 수 있도록 도와줍니다. – Plutonix

답변

4

여기에 여러 가지를 물어 보았지만 일반적으로 객체에서 같은 유형 (심지어 같은 인스턴스)을 참조하는 것이 좋습니다.

public class Thing { 
    private string name; 

    public Thing(string name) { 
     this.name = name; 
    } 
    public Thing Other { 
     get; 
     set; 
    } 

    public override string ToString() { 
     return this.name; 
    } 
} 

var o = new Thing("Foo"); 
o.Other = o; 
Debug.WriteLine(o.Other.Other.Other.Other.ToString()); // Could go on forever 
  1. 당신은 예외에 대한 당신의 주장에 맞아요. jim.Spouse은 null 참조이므로 속성을 설정할 수 없으므로 throw됩니다.
  2. jim.Spouse = jane;으로 설정하면 참조를 설정할 수 있습니다. 이 경우, jim.Spousejane으로 평가되므로 jim.Spouse.Spouse = jim;이라고 말하고 싶을 것입니다.
  3. 동일한 유형의 입력란은 다른 항목과 다릅니다. 클래스가 사용하는 유형의 변수 일뿐입니다. 유형이 동일한 유형의 다른 것에 대한 참조를 갖는 것은 드문 패턴이 아닙니다. 예를 들어, Employee 클래스는 Employee 클래스 인 Manager에 대한 참조를 가질 수 있습니다. 또 다른 일반적인 예는 트리 구현입니다. 이진 트리에서는 노드가 왼쪽/오른쪽 하위 노드에 대한 참조를 갖습니다.