一个简单的例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace text2
{
//多播委托
class Program
{
static void Function1()
{
Console.WriteLine("Funcrion1执行了");
}
static void Function2()
{
Console.WriteLine("Funcrion2执行了");
}
static void Function3()
{
Console.WriteLine("Funcrion3执行了");
}
static void Main(string[] args)
{
Action action = Function1;
action += Function2;
action += Function3;
if (action != null)
{
action();
}
Console.ReadLine();
}
}
}
注意
多播委托包含一个逐个调用委托的集合,如果通过委托调用其中的一个方法出现异常,整个迭代就会停止。
也可以遍历多播委托中的所有委托,逐一调用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace text2
{
//多播委托
class Program
{
static void Function1()
{
Console.WriteLine("Funcrion1执行了");
}
static void Function2()
{
Console.WriteLine("Funcrion2执行了");
}
static void Function3()
{
Console.WriteLine("Funcrion3执行了");
}
static void Main(string[] args)
{
Action action = Function1;
action += Function2;
action += Function3;
//if (action != null)
//{
// action();
//}
Delegate[] delegates = action.GetInvocationList();
foreach (Delegate d in delegates)
{
d.DynamicInvoke();
}
Console.ReadLine();
}
}
}
事件
事件基于委托,是一种具有特殊签名的委托
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Text
{
class Program
{
public delegate void Function();
public event Function function;
public static void Print()
{
Console.WriteLine("Print 执行了");
}
static void Main(string[] args)
{
Program p = new Program();
p.function = Print;
p.function();
Console.ReadLine();
}
}
}