猫叫老鼠跑主人被惊醒(C#面试题)
代码实现:
//定义一个无参无返回值的委托
public delegate void RelationDelegate();
public abstract class EventAbstractClass
{
//声明该委托的事件
public event RelationDelegate RelationEvent;
/// <summary>
/// 执行事件
/// </summary>
public void DoEvent()
{
//当事件有关联方法时,执行该事件
if (this.RelationEvent != null)
this.RelationEvent();
}
}
public abstract class ObjectAbstractClass
{
public ObjectAbstractClass(EventAbstractClass pObj)
{
//为事件绑定需要执行的方法
pObj.RelationEvent += new RelationDelegate(Dosomething);
}
//定义抽象方法
public abstract void Dosomething();
}
public class Cat : EventAbstractClass
{
/// <summary>
/// 在猫的行为执行完后调用事件来获取联动效果
/// </summary>
public void CatCry()
{
Console.WriteLine("Cat Is Cry Now.");
this.DoEvent();
}
}
public class Person : ObjectAbstractClass
{
//通过构造函数为Person类注册事件需要执行的方法
public Person(EventAbstractClass pObjPerson)
: base(pObjPerson)
{
}
public override void Dosomething()
{
Console.WriteLine("Person.");
}
}
public class Mouse : ObjectAbstractClass
{
public Mouse(EventAbstractClass pObjMouse)
: base(pObjMouse)
{ }
public override void Dosomething()
{
Console.WriteLine("Mouse.");
}
}