public void Execute() { Student st1 = new Student("王翦"); Teacher th1 = new Teacher("卫青"); //MyDelegate01 md1 = new MyDelegate01(st1.SayHello); MyDelegate01 md1 = st1.SayHello; //此处不可以用+=,因为此时委托还未实例化 md1 += st1.DoHomework; //多播委托(一个委托可以关联多个方法) md1 += th1.TeachEnglish; md1 += st1.DoHomework; //同一个方法,可以添加多次,这样委托调用时就会执行多次 //也可以添加静态方法 md1 += Student.PlayGame; Student st2 = new Student("小李"); Teacher th2 = new Teacher("老李"); MyDelegate01 md2 = new MyDelegate01(st2.DoHomework); //md2 += st2.SayHello; md2 += th2.TeachEnglish; //将委托md2拥有的方法,添加到md1上 md1 += md2; md1 -= st1.DoHomework; //会将后添加的方法移除 md1 -= st2.SayHello; //移除一个不存在的方法,不会报错 //md1.Invoke();//调用执行委托 md1();//调用执行委托 }
static void Main(string[] args) { //Delegates //1. Placeholder for one of more methods //2. Can use in anonymous 'lambda' expressions //3. Link to events var delegateInstance = new MyDelegate01(Method01); delegateInstance(); }
static void Main(string[] args) { MyDelegate01 myDelegateInstance = Method01; Action myotherdelegateinstance = Method02; myDelegateInstance(); Delegate_2 delegate_2instance = Method03; Console.WriteLine(delegate_2instance(6, true)); }
static void Main(string[] args) { // Delegates // 1. Placeholders for one or more methods // 2. Can use in anonymous 'lambda' expressions, very useful particularly with 'async' web calls // 3. Link to events ==> EVENT FIRES EG BUTTON CLICK ==> All methods must match pattern in our delegate // void MyDelegate01(); Any methods match pattern void MyMethod(); // string (int) string (int); // Create event ==> run given methods // 1. Create delegate (top) // 2. Create delegate instance var delegateInstance = new MyDelegate01(Method01); // 3. run delegate instance ==> call our method delegateInstance(); }
static void Main(string[] args) { //Delegates //1. Placeholder for one or more methods //2. Can use in annoymous 'lambda' expressions, very usefull particually with 'async' web calls //3. Link to events ==> EVENT fires eg button click ==> all methods must match pattern given in our delegate // void myDelegate01(); any methods would have to match pattern void myMethod(); // string (int) string (int) //Create an event ==> and run given methods //1. Create Delegate //2. Create delegate instance var delegateInstance = new MyDelegate01(Method01); //3. Run the delegate instance and will call the method delegateInstance(); }