using System;
using System.Collections;
namespace SceneA
{
public delegate void SceneEventHandler(object sender, CharEventArgs e);
public class CharEventArgs : EventArgs
{
public string Action;
public CharEventArgs(string Action)
{
this.Action = Action;
}
}
public class Animal
{
protected Hashtable EventList= new Hashtable();
protected Scene CurrentScene;
protected string Name;
public Animal(string Name,Scene SceneObj)
{
this.Name=Name;
this.CurrentScene=SceneObj;
SceneObj.AddListener(this);
}
public void AddEventListener(string e,SceneEventHandler Action)
{
EventList.Add(e,Action);
}
public void Trigger(string Action)
{
CurrentScene.PostMessage(this,Action);
}
public void Dispatch(Object Obj,CharEventArgs e)
{
Object fun;
if(EventList.Count==0)
{
// Console.WriteLine(this.Name+"说:没我啥事 你们继续");
}else if(null!=(fun=EventList[e.Action]))
((SceneEventHandler)fun)(Obj,e);
}
}
public class Cat:Animal
{
public Cat(string Name,Scene SceneObj):base(Name,SceneObj){}
}
public class Dog:Animal
{
public Dog(string Name,Scene SceneObj):base(Name,SceneObj){}
}
public class Mouse:Animal
{
public Mouse(string Name,Scene SceneObj):base(Name,SceneObj){
AddEventListener("喵",new SceneEventHandler(Escape));
}
public void Escape(object sender, CharEventArgs e)
{
if(sender.ToString()=="SceneA.Dog")
{
Console.WriteLine(sender.ToString()+e.Action+"→"+ this.Name+"说:这家伙是狗甭理它!");
return;
}
Console.WriteLine(sender.GetType().ToString()+e.Action+"→"+ this.Name+"说:快快逃呀");
}
}
public class Man:Animal
{
public Man(string Name,Scene SceneObj):base(Name,SceneObj){}
}
public class Scene
{
private event SceneEventHandler SceneEvent;
public void PostMessage(Animal Animal,string Action)
{
this.SceneEvent(Animal,new CharEventArgs(Action));
}
public void AddListener(Animal Animal)
{
this.SceneEvent += new SceneEventHandler(Animal.Dispatch);
}
public void ManWake(object sender, CharEventArgs e)
{
Console.WriteLine(sender.ToString()+e.Action+"→吵死啦!");
}
[STAThread]
static void Main(string[] args)
{
Scene MainScene = new Scene();
Cat CatObj = new Cat("汤姆",MainScene);
Mouse MouseJL = new Mouse("杰里",MainScene);
Mouse MouseJM = new Mouse("杰妹",MainScene);
Dog DogObj = new Dog("旺财",MainScene);
Man ManObj = new Man("小强",MainScene);
ManObj.AddEventListener("喵",new SceneEventHandler(MainScene.ManWake));