什么是委托?委托就是持有一个或多个方法的对象,并且该对象可以执行,可以传递。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { // 定义委托事件 delegate void ActCute(); static void Main(string[] args) { ActCute del = null; Dog dog1 = new Dog("dog"); Cat cat1 = new Cat("cat"); // 委托事件的添加 del = dog1.WagTail; del += cat1.InnocentLook; // 定义lambda 表达式 del += () => { Console.WriteLine("这是lambda表达式定义的方法!!!"); }; // 按照添加的顺序依次调用 del(); } public class Dog { private string Name; public Dog(string name) { Name = name; } public void WagTail() { Console.WriteLine(Name + "正在摇尾巴..."); } } public class Cat { private string Name; public Cat(string name) { Name = name; } public void InnocentLook() { Console.WriteLine(Name + "正在摆弄无辜表情..."); } } } }
事件:一种封装受限制的委托。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Client1 c1 = new Client1(); Client1 c2 = new Client1(); // 绑定委托 Dog.NewDog += c1.WangADog; Dog.NewDog += c2.WangADog; Dog dog1 = new Dog("jack"); } public class Dog { private string Name; public delegate void Handler(); // 定义委托类型 public static event Handler NewDog; // 在委托事情上定义事件 public Dog(string name) { Name = name; if (NewDog != null) { NewDog(); } } public void WagTail() { Console.WriteLine(Name + "正在摇尾巴..."); } } class Client1 { public void WangADog() { Console.WriteLine("我想要一条狗!!!"); } } } }