现在的位置: 首页 > 综合 > 正文

委托:非常好的能说明 委托+事件的例子。

2011年12月01日 ⁄ 综合 ⁄ 共 3044字 ⁄ 字号 评论关闭

问题:老板吩咐小王,当小李玩游戏时候,就把小李薪水扣掉100块。
(我按自己的习惯,重写的代码,更好理解了)

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace AspNetTest.Common
{
    
/// <summary>
    
/// Define_Delegate_Xiaowang 的摘要说明。
    
/// </summary>

    public class Define_Delegate_Xiaowang : System.Web.UI.Page
    
{
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            XiaoLi xiaoli 
= new XiaoLi(1500);
            Response.Write(
"小李打游戏前的薪水是:" + xiaoli.Sacalar.ToString() + "<br>");
            
            XiaoWang xiaowang 
= new XiaoWang();
            xiaoli.PlayGameEvent 
+= new PlayEventHandler(xiaowang.SubtractSalary);
            
            xiaoli.PlayGame();
            Response.Write(
"小李打游戏后的薪水是:" + xiaoli.Sacalar.ToString() + "<br>");
            
// 在此处放置用户代码以初始化页面
        }

        
        
public delegate void PlayEventHandler(Empolyee sender);
        
        
public class Empolyee
        
{
            
public Empolyee(double sacalar)
            
{
                
this.sacalar = sacalar;
            }

            
private double sacalar;
            
public double Sacalar
            
{
                
get
                
{
                    
return sacalar;
                }

                
set
                
{
                    
this.sacalar = value;
                }

            }
            
        }

        
        
public abstract class EmpolyeeWhoPlay : Empolyee
        
{
            
public EmpolyeeWhoPlay(double sacalar) : base(sacalar)
            
{
            }

            
public abstract void PlayGame();
        }

        
        
public class XiaoLi : EmpolyeeWhoPlay
        
{
            
public XiaoLi(double sacalar) : base(sacalar)
            
{
            }

            
public PlayEventHandler PlayGameEvent;
            
private void OnPlayGame()
            
{
                
if(PlayGameEvent != null)
                
{
                    PlayGameEvent(
this);
                }

            }

            
public override void PlayGame()
            
{
                HttpContext.Current.Response.Write(
"小李正在玩游戏!<br>");
                OnPlayGame();
            }

        }

        
        
public class XiaoWang
        
{
            
public void SubtractSalary(Empolyee sender)
            
{
                sender.Sacalar 
-= 100;
                HttpContext.Current.Response.Write(
"小王发现了小李打游戏,扣了小李薪水100块!<br>");                
            }

        }

        
        
Web 窗体设计器生成的代码
    }

}

抱歉!评论已关闭.