2012-05-20 2 views
0

주 클래스 내에 몇 개의 중첩 클래스를 만들려고합니다. 난 그냥 그것을 위해 변수를 보유하고 정적 클래스를 생성 한 모든 그들에게 그것을 통과하지 않고 코드를 밖으로 MyPlayer 클래스를 통해 액세스 할 수있을 것입니다 수 있도록C# 중첩 클래스

public class MyPlayer : Player 
{ 

    public bool TargetEnemy() 
    { 
     return true; 

    } 

    public class Movement 
    { 
     public uint aInt = 1; 

     public TurnLeft() 
     { 

     } 
    } 

    public class ActionBar 
    { 

    } 
} 

나는 많은 다른 클래스가 있습니다. Main.Units.MyPlayer.Movement를 사용하여 MyPlayer-> Movement에 액세스 할 수 있지만이 클래스는 정적 클래스에서 정의한 MyPlayer 인스턴스에 연결되어 있지 않습니다.

예를 들어, MyPlayer-> Movement-> TurnLeft()를 할 수 있기를 원합니다. 나는 이것을 어떻게 얻을 수 있을까? 귀하의 답변에 감사드립니다.

+0

'다중 inheritance'는 완전히 다른 것 (그리고 in'.Net 존재하지 않습니다 ') 나는 그 태그를 제거했다. – gdoron

답변

2

클래스 중첩의 개념을 클래스 구성과 혼동하는 것일 수 있습니다. Player 클래스에 Movement 인스턴스가 있으려면 개인 필드 movement과 공개 속성 Movement을 정의하여 액세스 할 수 있습니다.

public class Player 
{   
    public bool TargetEnemy() 
    { 
     return true;    
    } 

    private Movement movement = new Movement(); 

    public Movement Movement 
    { 
     get { return movement; } 
     set { movement = value; } 
    } 
} 

public class Movement 
{ 
    public uint aInt = 1; 

    public TurnLeft() 
    { 

    } 
} 

public class ActionBar 
{ 

} 

그런 다음, 당신은 당신의 Player 클래스의 인스턴스를 생성하고 포함 Movement에 액세스 할 수 있습니다 :

Player myPlayer = new Player(); 
myPlayer.Movement.TurnLeft(); 
+0

감사합니다. 이제 작동했습니다. – user1127093

+0

'Movement' 클래스가 변경 될 수 있으므로 Movement 속성의 설정자를 제거합니다. – CodesInChaos

+1

@CodeInChaos : 좋은 지적이지만, 클래스 디자인에서 변경할 수 있는지 여부를 결정할만큼 충분히 추론 할 수는 없습니다. 내 의심은 그렇게해서는 안된다는 것이고,'TurnLeft'는 실제로 어떤 종류의 움직임을 위해 파생 된 클래스에 의해 오버라이드 될 수있는 다형성의'Move' 메소드로 대체되어야합니다. – Douglas

0

MyPlayer에는 Movement 인스턴스에 대한 참조가 있어야합니다.

public class MyPlayer : Player 
{ 
    public static Movement movement = new Movement(); 
    ... 
} 
+0

감사합니다. – user1127093

+0

@ user1127093 내가 도울 수있어서 기쁩니다. – gdoron