asp.net 委托

asp.net 委托

我的直接感觉:1、客户代码做委托的决策者

       2、在A处定义,在B处实现

 示例代码

ContractedBlock.gif ExpandedBlockStart.gif Code
    [Serializable]
    
public class Parents
    {
        
public void GetMilk(object sender, ParentName e)
        {
            Baby b 
= (Baby)sender;
            Console.WriteLine(
"孩子别哭,{0}拿奶给你喝", b.ParentName);
        }

        
public void ChangeDiapers(object sender, ParentName e)
        {
            Baby b 
= (Baby)sender;
            Console.WriteLine(
"孩子真小,别怕,{0}帮你换尿布了", e.Name);
        }
    }

    [Serializable]
    
public class ParentName : EventArgs
    {
        
string name;
        
public string Name
        {
            
get { return name; }
            
set { name = value; }
        }
    }

    [Serializable]
    
public class Baby
    {
        
public delegate void BabyEventHandler(object sender, ParentName e);
        
public event BabyEventHandler BabyEvent;

        
#region 属性
        ParentName _p 
= new ParentName();
        
public string ParentName
        {
            
get { return _p.Name; }
            
set { _p.Name = value; }
        }

        
string _BabyName;
        
public string BabyName
        {
            
get { return _BabyName; }
            
set { _BabyName = value; }
        }
        
#endregion

        
public void Cry()
        {
            
if (BabyEvent != null)
            {
                ParentName e 
= new ParentName();
                e.Name 
= this.ParentName;
                BabyEvent(
this, e);
            }
        }

        
/// <summary>
        
/// baby大便
        
/// </summary>
        public void Stool()
        {
            
if (BabyEvent == null)
                
return;

            ParentName e 
= new ParentName();
            e.Name 
= this.ParentName;
            BabyEvent(
this, e);
        }

        
/// <summary>
        
/// 深拷贝
        
/// </summary>
        
/// <returns></returns>
        private Baby DeepClone()
        {
            Baby b;
            MemoryStream memoryStream 
= new MemoryStream();
            BinaryFormatter formatter 
= new BinaryFormatter();
            formatter.Serialize(memoryStream, 
this);
            memoryStream.Position 
= 0;
            b 
= (Baby)formatter.Deserialize(memoryStream);
            
return b;
        }

        
/// <summary>
        
/// 
        
/// </summary>
        
/// <param name="t"></param>
        
/// <returns></returns>
        public Baby Clone(bool t)
        {
            
if (t)
            {
                
return DeepClone();
            }
            
else
            {
                
return (Baby)this.MemberwiseClone();
            }
        }
    }

 

客户代码:

ContractedBlock.gif ExpandedBlockStart.gif Code
Parents p = new Parents();
Baby b1 
= new Baby();

b1.ParentName 
= "老爸";
b1.BabyEvent 
+= new Baby.BabyEventHandler(p.GetMilk);
b1.Cry();
b1.BabyEvent 
-= new Baby.BabyEventHandler(p.GetMilk);

b1.ParentName 
= "老妈";
b1.BabyEvent 
+= new Baby.BabyEventHandler(p.ChangeDiapers);
b1.Stool();

 

 显示结果:

孩子别哭,老爸拿奶给你喝

孩子真小,老妈给你换尿布

转载于:https://www.cnblogs.com/yeungsean/archive/2009/06/24/1510472.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值