2013-07-16 3 views
0

부모 클래스가 모든 하위 클래스 목록을 포함 할 수 있습니까? 나는 다음 이벤트를 삭제, 메시지 (텍스트 상자)이 될 수 event.First()을 그릴 수부모 클래스에있는 객체 목록

여기 두 개의 클래스를 가지고 (홈페이지에서),이 시나리오에서는

public class Event{ 

    List<Event> events = new <Event>(); 
    // etc 
} 

public class Message : Event{ 
    string text; 
    // etc 
} 

을 다음과 같이 그들이 있습니다. 이 문제가 있습니까? 이것은 RPG 대화 시스템을위한 것입니다.

+0

http://stackoverflow.com/questions/8928464/for-an-object-can-i-get-all-its-subclasses-using-reflection-or-other-ways 최고 대답 여기 네가 찾고있는 것 같아. –

+0

이벤트 유형을 대신 열거 형으로 정의 하시겠습니까? 그런 다음 Enum.GetValues ​​및 관련 정적 메서드를 사용하면 이러한 유형의 작업을 수행하는 데 도움이됩니다. – Alan

답변

0

는보다 동적 인 방법으로 큐

void Main() 
{ 
    Events.Queue(new Message(){ Text = "Hit points +5" }); 
    Events.Queue(new Message(){ Text = "Hit points +6" }); 
    Events.Queue(new Message(){ Text = "Hit points +7" }); 

    while(Events.HasNext()) 
    { 
     Console.WriteLine(Events.GetNext().Text); 
    } 
} 

public static class Events 
{ 
    private static Queue<Message> messages = new Queue<Message>(); 

    public static void Queue(Message message) 
    { 
     messages.Enqueue(message); 
    } 

    public static Message GetNext() 
    { 
     return messages.Dequeue(); 
    } 

    public static bool HasNext() 
    { 
     return messages.Count > 0; 
    } 
} 

public class Message 
{ 
    public string Text {get; set;} 
} 

의 일종을 사용하여 (기타 이벤트 등을 입력 상자가 될 것이다), 당신은 간단한 시스템을 렌더링 구축하는 인터페이스를 사용할 수 있습니다.

void Main() 
{ 
    Events.Queue(new Message(){ Text = "Hit points +5" }); 
    Events.Queue(new Message(){ Text = "Hit points +6" }); 
    Events.Queue(new ChuckNorris()); 

    SpriteBatch sb = new SpriteBatch(...); 
    while(Events.HasNext()) 
    { 
     Events.GetNext().Render(sb); 
    } 
} 

public static class Events 
{ 
    private static Queue<IRenderable> renderables = new Queue<IRenderable>(); 

    public static void Queue(IRenderable renderable) 
    { 
     renderables.Enqueue(message); 
    } 

    public static IRenderable GetNext() 
    { 
     return renderables.Dequeue(); 
    } 

    public static bool HasNext() 
    { 
     return renderables.Count > 0; 
    } 
} 

public interface IRenderable 
{ 
    void Render(SpriteBatch sb); 
} 

public class Message : IRenderable 
{ 
    public string Text {get; set;} 

    public void Render(SpriteBatch sb) 
    { 
     // ... render code 
    } 
} 

public class ChuckNorris : IRenderable 
{ 
    public void Render(SpriteBatch sb) 
    { 
     // render code 
    } 
} 
+0

대답 주셔서 감사합니다. 매우 유용합니다! – user2581885

관련 문제