using System;
namespace ConsoleApp1
{
public delegate void CatCallDele();
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse mouse = new Mouse();
Person person = new Person();
cat.CatCallEvent += new CatCallDele(mouse.MouseJump);
cat.CatCallEvent += new CatCallDele(person.PersonWakeUp);
cat.CatCall();
}
}
class Cat
{
public event CatCallDele CatCallEvent;
public void CatCall()
{
Console.WriteLine("猫叫了一声");
if (CatCallEvent != null)
{
CatCallEvent.Invoke();//Invoke方法是用于多线程环境中跨线程调用委托,主要作用就是将委托的执行转移到与创建委托线程不同的线程上
}
}
}
class Mouse
{
public void MouseJump()
{
Console.WriteLine("老鼠跳了出来");
}
}
class Person
{
public void PersonWakeUp()
{
Console.WriteLine("人醒来了");
}
}
}
二、通过委托无事件的形式
using System;
namespace ConsoleApp1
{
public delegate void MyDelegate();
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse mouse = new Mouse();
Person person = new Person();
MyDelegate m1 = new MyDelegate(cat.CatCall);
MyDelegate m2 = new MyDelegate(mouse.MouseJump);
MyDelegate m3 = new MyDelegate(person.PersonWakeUp);
m1 += m2;
m1 += m3;
m1();
}
}
class Cat
{
public void CatCall()
{
Console.WriteLine("猫叫了一声");
}
}
class Mouse
{
public void MouseJump()
{
Console.WriteLine("老鼠跳了出来");
}
}
class Person
{
public void PersonWakeUp()
{
Console.WriteLine("人醒来了");
}
}
}
三、通过系统自带的委托加事件的形式
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse mouse = new Mouse();
Person person = new Person();
cat.CatCallEvent += new Action(mouse.MouseJump);
cat.CatCallEvent += new Action(person.PersonWakeUp);
cat.CatCall();
}
}
class Cat
{
public event Action CatCallEvent;
public void CatCall()
{
Console.WriteLine("猫叫了一声");
if (CatCallEvent != null)
{
CatCallEvent.Invoke();//Invoke方法是用于多线程环境中跨线程调用委托,主要作用就是将委托的执行转移到与创建委托线程不同的线程上
}
}
}
class Mouse
{
public void MouseJump()
{
Console.WriteLine("老鼠跳了出来");
}
}
class Person
{
public void PersonWakeUp()
{
Console.WriteLine("人醒来了");
}
}
}