C#委託

轉自:http://www.cnblogs.com/ArmyShen/archive/2012/08/31/2664727.htmlhtml

委託是一個類,它定義了方法的類型,使得能夠將方法看成另外一個方法的參數來進行傳遞,這種將方法動態地賦給參數的作法,能夠避免在程序中大量使用if-else(switch)語句,同時使得程序具備更好的可擴展性。編程

使用委託能夠將多個方法綁定到同一個委託變量上(一般稱這個委託變量爲:委託鏈),當調用此變量時,會依次調用全部綁定的方法;於此同時,也能夠經過相似綁定的方式刪除方法。函數

 

一個簡單的委託例子post

複製代碼
using System; using System.Collections; namespace Delegate { //用delegate關鍵字聲明一個委託 //委託原型必須與預委託的方法具備相同的返回值和參數類型 delegate void LearnDelegate(string name); public class Test {
     //要進行委託的方法 static void LearnA(string name) { Console.WriteLine("小王在學" + name); }        static void LearnB(string name) { Console.WriteLine("小張在學" + name); } static void Main() { //建立委託實例,並把委託函數名看成參數傳遞給委託對象 LearnDelegate learn_A = new LearnDelegate(LearnA); LearnDelegate learn_B = new LearnDelegate(LearnB); //經過委託對象,給綁定的函數傳遞參數,其實如今的learn_A和learn_B就是learnA和learnB的函數別名 learn_A("C#"); learn_B("C++"); } } }
複製代碼

 

委託鏈spa

複製代碼
static void Main() {   //建立委託實例   LearnDelegate learn_A = new LearnDelegate(LearnA);   LearnDelegate learn_B = new LearnDelegate(LearnB);   //聲明一個委託鏈,不須要實例化它   LearnDelegate DelegateLst;   //把委託對象直接相加並賦給委託鏈   DelegateLst = learn_A + learn_B;   //給委託鏈傳值   DelegateLst("編程");   Console.WriteLine();   //一樣,也能夠對委託鏈中的委託對象進行添加和刪除操做    DelegateLst -= learnA;//刪除一個委託方法,這裏使用DelegateLst -= Learn_A;效果是同樣的,由於此時能夠看做它是LearnA方法的一個別名   DelegateLst("編程");   Console.WriteLine();   DelegateLst += learnB;//添加一個委託方法,一樣這裏也可使用DelegateLst += Learn_B;   DelegateLst("編程"); }
複製代碼

 

委託鏈的簡化使用code

複製代碼
using System; using System.Collections; namespace Delegate { //用delegate關鍵字聲明一個委託 //委託原型必須與預委託的方法具備相同的返回值和參數類型 delegate void LearnDelegate(string name); public class Test { static void Main() { //聲明一個委託鏈,賦null值 LearnDelegate DelegateLst = null; //下面這種形式實際上是匿名方法的一種應用 DelegateLst += delegate(string name) { Console.WriteLine("小王在學" + name); }; DelegateLst += delegate(string name) { Console.WriteLine("小張在學" + name); }; DelegateLst("編程"); } } }
複製代碼

 

最後的一個例子htm

複製代碼
using System; using System.Collections; namespace Delegate { //用delegate關鍵字聲明一個委託 //委託原型必須與預委託的方法具備相同的返回值和參數類型 delegate void AnimalDelegate(string AnimalName); class Animal { public Animal() { } //要進行委託的方法 public void Miaow(string name) { Console.WriteLine( name + " 喵喵叫"); } //要進行委託的方法 public void Bark(string name) { Console.WriteLine(name + " 汪汪叫"); } //要進行委託的方法 public void Baa(string name) { Console.WriteLine(name + " 咩..."); } } public class MainFunc { static void choseAnimal(string name, AnimalDelegate delegateFun) { delegateFun(name); } static void Main() { /*AnimalDelegate cat = new AnimalDelegate(new Animal().Miaow); cat("貓咪"); AnimalDelegate dog = new AnimalDelegate(new Animal().Bark); dog("狗狗");*/ //上下的兩種調用方式是等價的  choseAnimal("喵星人", new Animal().Miaow); choseAnimal("汪星人", new Animal().Bark); choseAnimal("喜洋洋", new Animal().Baa); } } }
複製代碼
相關文章
相關標籤/搜索