laifangsong's blog

取长补短,精益求精。 (打个广告,想做手机网站和asp/asp.net网站的可以跟我联系.QQ:25313644)
posts - 51, comments - 188, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

委托:两个例子(主人仆人、打游戏)

Posted on 2007-01-25 12:18 laifangsong 阅读(77) 评论(0)  编辑 收藏 所属分类: 概念

using System;

namespace gainian.DelegateExample
{
    
    
public delegate void EatEventHander(object sender, EatEventArgs e);
    
    
public class EatEventArgs: EventArgs
    
{
        
public string EatWhere;
        
public decimal EatMoney;
        
        
public EatEventArgs(string EatWhere, decimal EatMoney)
        
{
            
this.EatWhere = EatWhere;
            
this.EatMoney = EatMoney;
        }

    }

    
    
public class Delegate1
    
{
//        static void Main(string[] args)
//        {
//            Master master = new Master();
//            Servant servant = new Servant();
//            
//            master.EatEvent += new EatEventHander(servant.Arrange);
//            master.OnHungry("福州大酒店", 1000);
//            
//            Console.ReadLine();    
//        }
    }


    
class Master
    
{                
        
public event EatEventHander EatEvent;        
        
        
private void OnEatEvent(EatEventArgs e)
        
{
            
if(EatEvent!=null)
            
{
                EatEvent(
this, e);
            }

        }

        
        
public void OnHungry(string EatWhere, decimal EatMoney)
        
{
            EatEventArgs e 
= new EatEventArgs(EatWhere, EatMoney);
            
            Console.WriteLine(
"主人:我肚子有点饿了!");
            Console.WriteLine(
"主人:我准备去 {0}吃饭,",EatWhere);
            Console.WriteLine(
"主人:准备消费 {0} !",EatMoney);
            Console.WriteLine(
"主人:仆人,快替我准备预定!\n");
            
            OnEatEvent(e);
        }

        
    }

    
    
class Servant
    
{
        
public void Arrange(object sender, EatEventArgs e)
        
{
            Console.WriteLine(
"仆人:我已接到您的指示了!");
            Console.WriteLine(
"仆人:您准备去 {0}吃饭,",e.EatWhere);
            Console.WriteLine(
"仆人:您消费 {0} !",e.EatMoney);
            Console.WriteLine(
"仆人:我马上帮您预定!\n");            
        }

    }
    

}


using System;

namespace gainian.DelegateExample
{
        
    
public delegate void PlaygameEventHandle(Employee emp);
    
    
/// <summary>
    
/// Delegate2 的摘要说明。
    
/// </summary>

    public class Delegate2
    
{
        
public Delegate2()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        
        
static void Main(string[] args)
        
{
            XiaoLi xiaoli 
= new XiaoLi("小李",1000);
            XiaoZhang xiaozhang 
= new XiaoZhang("小张",1000);
            
            Console.WriteLine(
"小李原来的薪水是 {0}", xiaoli.Salary);
            
            xiaoli.playgameEvent 
+= new PlaygameEventHandle(xiaozhang.SubtractSalary);
            xiaoli.OnPlaygame();
            
            Console.WriteLine(
"小李打游戏后的薪水是 {0}", xiaoli.Salary);
            
            Console.ReadLine();
        }

        
    }

    
    
public class Employee
    
{
        
private string name;
        
        
private decimal salary;
        
        
public Employee(string name, decimal salary)
        
{
            
this.name = name;
            
this.salary = salary;
        }

        
        
public string Name
        
{
            
get
            
{
                
return this.name;
            }

            
set
            
{
                
this.name = value;
            }

        }

        
        
public decimal Salary
        
{
            
get
            
{
                
return this.salary;
            }

            
set
            
{
                
this.salary = value;
            }

        }

        
        
public virtual void OnPlaygame()
        
{
            
this.salary -= 10;
        }

                
    }

    
    
public class XiaoLi: Employee
    
{
        
public XiaoLi(string name, decimal salary) : base(name,salary)
        
{}
        
        
public event PlaygameEventHandle playgameEvent;
        
        
public override void OnPlaygame()
        
{
            Console.WriteLine(
"\n小李正在打游戏。。。\n");
            
if(playgameEvent!=null)
            
{
                playgameEvent(
this);
            }

        }

        
    }
    
    
    
public class XiaoZhang: Employee
    
{
        
public XiaoZhang(string name, decimal salary) : base(name,salary)
        
{}
        
        
public void SubtractSalary(Employee emp)
        
{
            Console.WriteLine(
this.Name + " 发现 " + emp.Name + " 在打游戏。");
            emp.Salary 
-= 100;
            Console.WriteLine(
this.Name + " 扣了 " + emp.Name + " 100块钱!\n");
        }

    }

    
    
}


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接: