asp.net 委托
我的直接感觉:1、客户代码做委托的决策者
2、在A处定义,在B处实现
示例代码
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();
}
}
}
[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();
}
}
}
客户代码:
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();
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();
显示结果:
孩子别哭,老爸拿奶给你喝
孩子真小,老妈给你换尿布