使用某種類型的隊列
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
}
}
http://stackoverflow.com/questions/8928464/for-an-object-can-i-get-all-its-subclasses-using-reflection-or-other-ways 頂答案在這裏似乎有你在找什麼。 –
也許你想把你的事件類型定義爲一個枚舉呢?然後Enum.GetValues和相關的靜態方法應該可以幫助你做這些類型的操作 – Alan