程序设计: 猫叫一声,所有的老鼠都开始逃跑,主人被惊醒 问题解决


<script type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

1、定义一个类型用于保存所有需要发送给事件通知接受者的附加信息(继承于System.EventArgs)
2、定义一个委托类型,用于指定事件触发时被调用的方法类型
3、定义一个事件成员
4、定义一个受保护的虚方法,负责通知事件的登记对象
5、定义一个方法,将输入转化为期望的事件

public   class  MailManager
    
{
        
//1、定义一个类型用于保存所有需要发送给事件通知接受者的附加信息(继承于System.EventArgs)

        
public class MailMsgEvernArgs : EventArgs
        
{
            
public MailMsgEvernArgs( string from,string to,string subject,string body)
            
{
                
this.from = from;
                
this.to = to;
                
this.subject = subject;
                
this.body = body;
                
            }

            
public readonly string from,to,subject,body;
        
        }


        
//2、定义一个委托类型,用于指定事件触发时被调用的方法类型

        
public delegate void MailMsgEventHandler(object sender,MailMsgEvernArgs args);

        
//3、定义一个事件成员

        
public event MailMsgEventHandler MailMsg;

        
//4、定义一个受保护的虚方法,负责通知事件的登记对象

        
protected virtual void OnMailMsg(MailMsgEvernArgs e)
        
{
            
if(MailMsg!=null)
                MailMsg(
this,e);
        }

        
//5、定义一个方法,将输入转化为期望的事件
        public void SimulateArrivingMsg(string from,string to,string subject,string body)
        
{
            MailMsgEvernArgs e 
= new MailMsgEvernArgs(from,to,subject,body);
            OnMailMsg(e);
        }

    }

注册事件:

static   void  Main( string [] args)
        
{
                  MailManager mm 
= new MailManager();
            mm.MailMsg 
+= new MailManager.MailMsgEventHandler(mm_MailMsg);
            mm.SimulateArrivingMsg(
"中国""美国""subject""body");
        }

 
private   static   void  mm_MailMsg( object  sender, MailManager.MailMsgEvernArgs args)
        
{

            Console.WriteLine(args.from);
            Console.WriteLine(args.to);
        }

事件练习

 

1、程序设计: 猫叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
 
要求: 1.要有联动性,老鼠和主人的行为是被动的。
 2.考虑可扩展性,猫的叫声可能引起其他联动效应。

 

public   class  CryArgs : EventArgs
    
{
        
public readonly string Name;
        
public CryArgs(string name)
        
{
            
this.Name = name;
        }

    }

    
public   delegate   void  SubEventHandler( object  sender,CryArgs cryArgs); 
    
    
public    class  Subject 
    

        
public event SubEventHandler SubEvent; 
        
protected virtual void FireAway(CryArgs cryArgs) 
        

            
if (this.SubEvent != null
                
this.SubEvent(this,cryArgs); 
        }
   

    }
 
    
public   class  Cat : Subject 
    
{
        
private string name;
        
public Cat(string name)
        
{
            
this.name = name;
        }

        
public void Cry() 
        
{
            CryArgs cryArgs 
= new CryArgs(name);
            
//Console.WriteLine("cat cryed."); 
            this.FireAway(cryArgs); 
        }
 
    }
 
    
public   abstract   class  Observer 
    

        
public Observer(Subject sub) 
        

            sub.SubEvent 
+= new SubEventHandler(Response); 
        }
 
        
public abstract void Response(object sender,CryArgs cryArgs);    
    }
 
    
public   class  Mouse : Observer 
    

        
private string name; 
        
public Mouse(string name, Subject sub) : base(sub) 
        
{   
            
this.name = name; 
        }

        
public override void Response(object sender, CryArgs cryArgs) 
        

            Console.WriteLine(cryArgs.Name
+"叫,"+name + " attempt to escape!"); 
        }
 
    }
 
    
public   class  Master : Observer 
    

        
public Master(Subject sub) : base(sub){}
        
public override void Response(object sender, CryArgs cryArgs) 
        
{
            Console.WriteLine(cryArgs.Name 
+ "叫," + "host waken"); 
        }
 
    }
 

注册事件

 

static   void  Main( string [] args)
        
{
            Cat c 
= new Cat("laomao");
            Mouse mouse 
= new Mouse("haozi", c);
            
            Master master 
= new Master(c);
            c.Cry();
         }
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值