/// <summary>
/// 委托和事件
/// </summary>
class DelgateAndEvent
{
/// <summary>
/// 定义委托
/// </summary>
/// <param name="str1"></param>
/// <param name="str2"></param>
public delegate void MyDelgate(string str1,string str2);
/// <summary>
/// 将委托封装为事件,为了默认使用+=绑定回调方法
/// </summary>
public event MyDelgate EventBasedOnMyDelgate;
/// <summary>
/// 触发事件
/// </summary>
public void TriggerEvent()
{
//触发事件,只能在定义事件的当前类中触发,在其他类中只能赋值不能调用。
//在这里将参数传递给最外层绑定的回调方法中并且调用方法。
//回调方法按照绑定的顺序依次执行。
EventBasedOnMyDelgate("hywin", "king");
}
public void TriggerEventLoop10()
{
for (int i = 0; i < 10; i++)
{
EventBasedOnMyDelgate("h10-" + i, "-k10-");
}
}
}
class DETest
{
public static void BindEventAndInvoke()
{
DelgateAndEvent de = new DelgateAndEvent();
//绑定毁掉方法
de.EventBasedOnMyDelgate+=new DelgateAndEvent.MyDelgate(de_EventBasedOnMyDelgate);
de.EventBasedOnMyDelgate += new DelgateAndEvent.MyDelgate(de_EventBasedOnMyDelgate2);
de.TriggerEvent();
//de.TriggerEventLoop10();
}
/// <summary>
/// 实际工作的代码,绑定到DelgateAndEvent.MyDelgate中,执行不执行,什么时候执行取决于实际调用事件的实现。
/// 参数来自于实际触发时传递过来的值。
/// </summary>
/// <param name="str1"></param>
/// <param name="str2"></param>
public static void de_EventBasedOnMyDelgate(string str1, string str2)
{
Console.WriteLine("这是第1个事件函数:" + str2 + str1);
}
public static void de_EventBasedOnMyDelgate2(string str1, string str2)
{
Console.WriteLine("这是第2个事件函数:"+ str1+str2);
}
}
委托和事件
最新推荐文章于 2024-04-29 20:47:39 发布