精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

關于C#委托你不可不知的幾件事

開發 后端
我們今天要給大家講講C#委托,雖然這屬于基礎知識,但弄清楚了委托究竟是怎么一回事還是有助于大家更好的開發。

委托是C#中非常重要的一個概念,并在C#中得到了豐富的應用,如事件,線程等。那什么是委托呢?具體來說,委托是一種引用方法的類型。一旦為委托分配了方法,委托將與該方法具有完全相同的行為。委托方法的使用可以像其他任何方法一樣,具有參數和返回值。

委托具有以下特點:

委托類似于 C++ 函數指針,但它是類型安全的。

委托允許將方法作為參數進行傳遞。

委托可用于定義回調方法。

委托可以鏈接在一起;例如,可以對一個事件調用多個方法。

方法不需要與委托簽名精確匹配。有關更多信息,請參見協變和逆變。

C# 2.0 版引入了匿名方法的概念,此類方法允許將代碼塊作為參數傳遞,以代替單獨定義的方法。

在C#中使用委托分為三步:

1.定義委托:

  1. //聲明委托  
  2. public delegate void MyDel(); 

2.實例化委托:

  1. TestDel t = new TestDel();   
  2. Console.WriteLine("-----以下是簡單使用委托演示--------");  
  3. //t.MyMethod();  
  4.  
  5. ///實例化委托,用一個方法來進行實例化  
  6. ///該方法簽名要與委托簽名一致  
  7. MyDel del = new MyDel(t.MyMethod); 

3.調用委托:

  1. ///調用委托  
  2. del(); 

好了,其實委托的變化很復雜,但基本都會符合這么三個步驟,說過了,這些,再來看一下完整的代碼

  1. namespace DelegateDemo{    
  2.   //聲明委托      
  3. public delegate void MyDel();      
  4. //聲明帶參的委托      
  5. public delegate void MyDel2(int num1, int num2);      
  6. //聲明帶有返值的委托      
  7. public delegate string MyDel3(string s);      
  8. //聲明委托用于演示匿名方法    
  9.   public delegate string ProcessString(string s);    class Program     
  10.  {          
  11. static void Main(string[] args)        
  12.   {           
  13.    #region 委托演示                       
  14.                /*       
  15.        TestDel t = new TestDel();                
  16.         #region 簡單實例化委托與調用委托        
  17.       Console.WriteLine("-----以下是簡單使用委托演示--------  
  18. ");             
  19.  //t.MyMethod();       
  20. ///實例化委托,用一個方法來進行實例化         
  21.      ///該方法簽名要與委托簽名一致    
  22.           MyDel del = new MyDel(t.MyMethod);                    
  23.      ///調用委托          
  24.     del();        
  25.       //C#2.0后可以這種方式實例化委托          
  26.     MyDel del4 = t.MyMethod;           
  27.    del4();        
  28.      //用靜態方法進行實例化     
  29.          del4 = TestDel.MyStaticMethod;      
  30.         del4();           
  31.    //以下代碼效果相同        
  32.       //MyDel2 del2 = new MyDel2(t.MyMethod);            
  33.   //del2(10, 20);          
  34.     MyDel2 del2 = t.MyMethod;           
  35.    del2(10, 20);           
  36.    //MyDel3 del3 = new MyDel3(t.MyMethod);          
  37.     //Console.WriteLine(del3("abc"));         
  38.    #endregion             
  39.             #region 匿名方法實例化委托          
  40.   Console.WriteLine("-----以下是匿名方法演示--------");           
  41.    //用匿名方法實例化委托         
  42.      ProcessString p = delegate(string inputString) {            
  43.       return inputString.ToUpper();      
  44.         };      
  45.         //通過委托調用匿名方法         
  46.      Console.WriteLine(p("aaaa"));        
  47.     #endregion            
  48.   #region 委托多播演示             
  49.  Console.WriteLine("-----以下是委托多播演示--------");            
  50.   MyDel mydel1 = t.MyMethod;      
  51.         MyDel mydel2 = t.MyMethod2;       
  52.        MyDel mydel3 = TestDel.MyMethod3;      
  53.       MyDel allMyDel = mydel1 + mydel2 + mydel3;       
  54.      allMyDel();           
  55.    allMyDel -= mydel3;       
  56.        allMyDel();            
  57.   #endregion                 
  58.        #region 委托作為參數演示         
  59.      Console.WriteLine("-------以下是委托作為參數演示------");      
  60.         MyDel3 paramMyDel3 = t.MyMethod;         
  61.    TestDel.MyParamMethod("aaa", paramMyDel3);        
  62.     #endregion           
  63.    #region 委托作為返回值          
  64.     Console.WriteLine("---以下是委托作為返回值演示------");          
  65.     ///returnMyDel指向t.MyReturnMethod()的返回值          
  66.   MyDel3 returnMyDel = t.MyReturnMethod();        
  67.       ///returnMyDel指向t.MyMethod          
  68.     //MyDel3 returnMyDel = t.MyMethod;     
  69.          Console.WriteLine(returnMyDel("sssssssssssss"));        
  70.       #endregion         
  71.       */           
  72.    #endregion           
  73.    //MyReturnDelegateTest my = new MyReturnDelegateTest();       
  74.        //my.MyTest();         
  75.      MyParamDelegateTest myParam = new MyParamDelegateTest();         
  76.      myParam.AddBooks();        
  77.       myParam.MyTest();        
  78.   }    }    public class TestDel   
  79.    {    
  80.       #region 普通方法        
  81.   public static void MyStaticMethod()       
  82.    {            
  83.   Console.WriteLine("My Static Method");     
  84.      }      
  85.     public void MyMethod()     
  86.      {            Console.WriteLine("MyMethod");   
  87.        }        public void MyMethod2()        {       
  88.      Console.WriteLine("My Method 22222222222");      
  89.     }       
  90.    public static void MyMethod3()      
  91.     {          
  92.     Console.WriteLine("My Method 3333333333333");     
  93.    }        
  94.   public void MyMethod(int num1, int num2)       
  95.  {     
  96.        Console.WriteLine(num1+num2);    
  97.       }        
  98.   public string MyMethod(string s)    
  99.       {            return s.ToUpper();      
  100.     }        #endregion         
  101.  /// <summary>       
  102.    /// 委托作為方法參數      
  103.     /// </summary>        
  104.   /// <param name="s"></param>       
  105.    /// <param name="del3"></param>      
  106.     public static void MyParamMethod(string s, MyDel3 del3)   
  107.      {         
  108.      Console.WriteLine(del3(s));      
  109.     }        /// <summary>    
  110.       /// 委托作為返回值        
  111.   /// </summary>       
  112.    /// <param name="s"></param>      
  113.     /// <returns></returns>     
  114.      public MyDel3 MyReturnMethod()      
  115.     {              
  116. ///返回符合委托規范的方法        
  117.      return MyMethod;        
  118.   }    } 

委托作為參數示例:

委托作為參數

  1.   public class MyParamDelegateTest    
  2.   {      
  3.     BookDB bookDB = new BookDB();    
  4.       public void AddBooks()       
  5.  {                
  6.  bookDB.AddBook(new Book() { BookID=1,BookName="C#",Price=123,IsPaperbook=true });           
  7.  bookDB.AddBook(new Book() { BookID = 1, BookName = "C#", Price = 123, IsPaperbook = false });     
  8.  bookDB.AddBook(new Book() { BookID = 2, BookName = "ASP.Net", Price = 12, IsPaperbook = true });             
  9.  bookDB.AddBook(new Book() { BookID = 1, BookName = "ADO", Price = 23, IsPaperbook = false });   
  10.      }       
  11.    /// <summary>         
  12.  /// 用來實例化委托        
  13.   /// </summary>        
  14.   /// <param name="b"></param>       
  15.    public void TestProcessBook(Book b)     
  16.    {           
  17.  if (b.IsPaperbook)            {          
  18.       Console.WriteLine(b.BookName);           
  19.    }        }     
  20.      double total = 0;      
  21.  public void TotalPrice(Book b)    
  22.    {            total += b.Price;       
  23.  }        public void MyTest()        {                        
  24.  //ProcessBook p=TestProcessBook;             
  1.  //ProcessBook p1=TotalPrice;           
  2.    //ProcessBook p2=p+p1;         
  3.      //把方法名做為參數進行傳遞        
  4.       bookDB.PrintBook(TestProcessBook);      
  5.       bookDB.PrintBook(TotalPrice);        
  6.     Console.WriteLine(total);        
  7.   }    }     
  8.  public delegate void ProcessBook(Book b);  
  9.   public class BookDB    {    
  10.       public List<Book> books = new List<Book>();    
  11.     public void AddBook(Book b)     
  12.      {          
  13.     books.Add(b);       
  14.    }         
  15.  public void PrintBook(ProcessBook process)     
  16.    {          
  17.     foreach (var book in books)            {       
  18.          process  
  19. (book);            }            
  20.           }    }    public class Book     
  21.  {        public int BookID { getset; }       
  22.    public string BookName { getset; }      
  23.     public double Price { getset; }    
  24.       public bool IsPaperbook { getset; }   
  25.    } 

委托作為返回值:

委托作為返回值

  1.  public delegate int MyReturnDelegate(int num1, int num2);   
  2.  public class MyReturnDelegateTest    {        
  3. public void MyTest()      
  4.   {         
  5.    MyCalcuate myCalcuate = new MyCalcuate();        
  6.     do      
  7.       {              
  8.   Console.WriteLine("請輸入符號進行以計算( + - * /)");            
  9.     string oper = Console.ReadLine();           
  10.      Console.WriteLine("請輸入操作數1");       
  11.          string num1 = Console.ReadLine();          
  12.       Console.WriteLine("請輸入操作數2");              
  13.   string num2 = Console.ReadLine();           
  14.      MyReturnDelegate myReturn = myCalcuate.Calcuate(oper);          
  15.       int result = myReturn(int.Parse(num1), int.Parse(num2));              
  16.   Console.WriteLine(                 
  17.    string.Format("{0}{1}{2}={3}", num1,oper,num2, result));            
  18.     Console.WriteLine("您還要繼續嗎?Y/N");               
  19.  //string continueFlag = Console.ReadLine();               
  20.  //if (continueFlag.ToUpper() == "N") break;            
  21. while (Console.ReadLine().ToUpper()!="N");        }    
  22. }     
  23. ublic class MyCalcuate   
  24.  {        
  25. public MyReturnDelegate Calcuate(string oper)        {            
  26. MyReturnDelegate myReturn = null;         
  27.    switch (oper)     
  28.        {                case "+":              
  29.       myReturn = delegate(int num1, int num2) { return num1 + num2; };              
  30.       break;              
  31.   case "-":                  
  32.   myReturn = delegate(int num1, int num2) { return num1 - num2; };              
  33.       break;           
  34.      case "*":                   
  35.  myReturn = delegate(int num1, int num2) { return num1 * num2; };                
  36.     break;             
  37.    case "/":          
  38.           myReturn = delegate(int num1, int num2) { return num1 / num2; };     
  39.                break;              
  40.   default:                  
  41.   break;            }     
  42.        return myReturn;       
  43.  }    } 
原文鏈接:http://www.cnblogs.com/yangyancheng/archive/2011/04/21/2024145.html
責任編輯:彭凡 來源: 博客園
相關推薦

2015-03-04 14:54:47

DockerIT管理基礎設施

2011-06-24 14:18:40

Firefox 5

2010-05-10 11:08:28

IPv6

2013-12-02 14:07:02

Hadoop大數據集群

2020-01-17 06:12:10

物聯網IOT技術

2021-01-28 10:17:54

人工智能AI機器學習

2014-06-20 14:35:48

浪潮數據

2024-03-21 08:57:39

語言軟件開發

2020-06-04 13:52:00

CRM選型

2021-09-05 08:46:29

CSPM網絡安全網絡攻擊

2015-09-16 14:13:53

應用集成應用開發企業架構

2015-05-21 10:03:04

應用標題ASO

2020-09-28 07:56:16

Python3.9Python開發

2010-05-21 09:21:48

PHPPHP開發者

2010-06-11 14:46:38

可路由協議

2015-01-20 11:24:52

Win 10

2011-06-14 14:04:11

測試用例

2017-11-30 12:23:55

IO性能RAID

2022-02-16 08:01:45

網絡安全趨勢

2020-11-30 13:12:04

Linux文本命令
點贊
收藏

51CTO技術棧公眾號

日本福利视频在线| 精品人伦一区二区三区| 午夜精品一区二区三区视频| 亚洲成人黄色| 精品国产乱码久久久久久虫虫漫画| 久久一区二区三区av| 在线视频 中文字幕| 午夜欧美精品| 一本大道亚洲视频| 亚洲欧洲国产视频| 91p九色成人| 亚洲国产综合在线| 一区二区三区四区视频在线| 少妇人妻偷人精品一区二区 | 成人免费观看在线| 色在线免费视频| 久久99精品国产.久久久久| 欧美成人午夜激情| 国产在线综合视频| 国产 日韩 欧美 综合 一区| 欧美日韩视频在线一区二区 | 日韩不卡一区二区| 久久久久成人网| 亚洲熟女少妇一区二区| 色先锋久久影院av| 欧美成人精品高清在线播放 | 日韩av一二三区| 久久综合99| 亚洲天堂网站在线观看视频| 9.1在线观看免费| 91精品麻豆| 欧美图区在线视频| 日韩欧美xxxx| 成年人在线网站| 亚洲一区av在线| 99精品视频网站| 成年人在线观看视频| 99久久精品免费看| 91手机在线视频| 国产精品色综合| 蜜臀av性久久久久蜜臀av麻豆| 97色在线视频| 日本三级理论片| 欧美网站在线| 欧美国产极速在线| 青娱乐av在线| 亚洲欧美伊人| 色综合91久久精品中文字幕| caoporn91| 欧美黄免费看| 欧美激情videos| 欧美日韩成人免费观看| 91超碰成人| 久久国产精品久久久久久| 国产在线观看免费视频软件| 成人精品电影| 日韩在线视频网站| 国产免费美女视频| 亚洲成人免费| 欧美国产高跟鞋裸体秀xxxhd| 欧美日韩在线观看成人| 中文字幕免费一区二区三区| 伦理中文字幕亚洲| 精品99在线观看| 99国产精品久久久久久久| 欧美猛男性生活免费| 玖玖爱这里只有精品| 午夜久久tv| 992tv成人免费影院| 国产一区二区三区影院| 国产精品久久久久久久免费软件| 欧美亚洲国产精品| 在线观看你懂的网站| 免费人成黄页网站在线一区二区| 国产精品视频免费观看www| 一本到在线视频| 国产精品一区二区x88av| 成人看片在线| 牛牛澡牛牛爽一区二区| 99久久免费视频.com| 日本一区高清不卡| 国产在线观看a| 亚洲国产一区二区a毛片| 欧美日韩一道本| 成人在线视频播放| 欧美一级欧美三级| 波多野结衣一二三区| 精品色999| 久久99精品久久久久久噜噜| 你懂的国产视频| 麻豆精品精品国产自在97香蕉| 91亚洲精华国产精华| 色婷婷av一区二区三区之e本道| 久久午夜色播影院免费高清| 99久久久无码国产精品性色戒| 2019中文字幕在线电影免费| 欧美影片第一页| 久久久久无码精品| 国产一区不卡| 欧美黑人狂野猛交老妇| 日韩欧美成人一区二区三区| 精品一区精品二区高清| 久久综合给合久久狠狠色| 欧美69xxxx| 精品人伦一区二区三区蜜桃网站 | 试看120秒一区二区三区| 亚洲激情成人网| 亚洲天堂av中文字幕| 黄色成人在线网站| 国产美女主播一区| 欧洲一级在线观看| 亚洲国产成人av好男人在线观看| 欧美午夜aaaaaa免费视频| 大陆精大陆国产国语精品| 色老头一区二区三区| 日本一区二区网站| 国产在线观看一区二区| 日韩精品无码一区二区三区| 波多野结衣在线播放| 欧美精品日韩综合在线| 中文字幕网站在线观看| 一区在线免费| 91麻豆国产精品| 国产中文在线观看| 欧美日韩中文字幕综合视频| 男人女人拔萝卜视频| 91欧美在线| 国产精品户外野外| 天堂av手机版| 亚洲一区av在线| 少妇欧美激情一区二区三区| 日韩免费久久| 国产精品国产福利国产秒拍 | 欧洲黄色一级视频| 一区二区三区高清在线观看| 日韩中文字幕视频在线观看| 国产无遮挡又黄又爽又色视频| 白白色 亚洲乱淫| 久久综合久久久久| 午夜久久av| 久久久久亚洲精品国产| 北条麻妃一二三区| 一区二区三区鲁丝不卡| 美女被艹视频网站| 欧美影视一区| 999热视频在线观看| av超碰免费在线| 欧美一级免费观看| 久艹视频在线观看| 国产成人在线视频网址| 国产 欧美 日本| 97成人在线| 亚洲91av视频| 欧美人体大胆444www| 黑人极品videos精品欧美裸| 波多野结衣先锋影音| 在线视频日韩| 欧美亚洲精品日韩| 国产精品久久久久久久久免费高清| 国产小视频国产精品| 亚洲系列在线观看| 综合在线观看色| 久久久国产精品久久久| 亚洲精品美女| 国产伦精品一区二区三区照片91| 午夜视频成人| 日韩精品中午字幕| 日韩欧美a级片| 国产三级一区二区| 亚洲36d大奶网| 午夜精品久久| 久中文字幕一区| 国产极品嫩模在线观看91精品| 深夜福利91大全| www.国产精品视频| 午夜精品免费在线| 91资源在线播放| 狠狠狠色丁香婷婷综合激情| 岛国大片在线播放| 精品一区毛片| 91网站免费看| 色多多在线观看| 日韩网站在线观看| 男人天堂手机在线观看| 色婷婷国产精品| 三上悠亚作品在线观看| 91亚洲国产成人精品一区二三| 国内外免费激情视频| 91精品久久久久久久蜜月| 精品免费国产| 日本久久久久| 69**夜色精品国产69乱| 午夜视频在线看| 亚洲国产成人久久综合一区| 中文字幕+乱码+中文字幕明步 | 精品久久影院| 性视频1819p久久| 91porn在线观看| 精品久久国产字幕高潮| 无码人妻丰满熟妇奶水区码| 综合av第一页| 熟女少妇一区二区三区| 国产一区在线观看麻豆| 每日在线更新av| 亚洲破处大片| 日本午夜精品一区二区三区| 超碰97久久| 91精品久久久久久久久久入口| 第一av在线| 久久夜色精品国产| 超碰在线影院| 亚洲精品白浆高清久久久久久| 11024精品一区二区三区日韩| 午夜精品福利一区二区三区蜜桃| 国产传媒免费在线观看| 国产校园另类小说区| 久久久国产精品无码| 国产99久久久国产精品潘金网站| 色婷婷狠狠18| 丝袜脚交一区二区| 中文字幕无码精品亚洲35| 亚洲成人99| 一区二区三区国产福利| 国产一区二区精品福利地址| 狠狠色综合一区二区| 国产一区二区av在线| 国产日本欧美一区二区三区| 日本免费一区二区三区四区| 国外成人在线直播| 欧洲精品二区| 久久久久久久久久久av| 动漫一区在线| 裸体女人亚洲精品一区| 成年视频在线观看| 久久视频在线视频| 色网站在线看| 在线观看视频亚洲| 国产黄在线看| 一区二区成人av| 国产美女性感在线观看懂色av| 亚洲日韩中文字幕| 可以在线观看的黄色| 亚洲天堂免费在线| porn视频在线观看| 在线观看久久久久久| 91官网在线| 久久久精品国产网站| 欧美精品电影| 久久天天躁狠狠躁夜夜躁| 国产网站在线免费观看| 久久这里只有精品99| 羞羞污视频在线观看| 欧美成在线视频| 亚洲淫性视频| 国内成人精品一区| 新版的欧美在线视频| 51精品国产黑色丝袜高跟鞋| 成人欧美大片| 国产精品午夜视频| 日韩一级视频| 亚洲自拍偷拍色图| 国产精品18hdxxxⅹ在线| 国产一区二区中文字幕免费看| 色先锋久久影院av| 日韩精品一区二区三区外面| 91综合在线| 日韩久久久久久久久久久久| 亚洲国产精品一区制服丝袜| 成年人视频观看| 日韩电影在线一区| 女人高潮一级片| 成人免费视频一区| 亚洲av无码一区二区三区人 | 欧美婷婷久久| 色一区二区三区四区| 蜜臀av.com| 国产一区二区你懂的| 一区二区三区视频网| 福利一区二区在线观看| 少妇光屁股影院| 18成人在线观看| 日韩精品人妻中文字幕| 欧美亚洲动漫另类| 亚洲第一成年人网站| 亚洲欧美在线免费| av网站网址在线观看| 5566日本婷婷色中文字幕97| 成人午夜毛片| 国产麻豆日韩| 99久久婷婷| 久草热视频在线观看| 精品一区二区三区在线视频| 天天躁日日躁狠狠躁av麻豆男男| 久久久久国产精品厨房| 真实国产乱子伦对白在线| 欧美午夜美女看片| 国产极品久久久| 在线日韩第一页| av小说在线播放| 国产原创欧美精品| 亚洲国产精品嫩草影院久久av| 日韩第一页在线观看| 久久精品一区二区国产| 亚洲精品鲁一鲁一区二区三区| 国产午夜精品福利| 国产无码精品一区二区| 欧美日韩dvd在线观看| 午夜小视频在线播放| 久久夜色撩人精品| 日韩成人亚洲| 精品在线观看一区二区| 欧美91大片| 中文字幕第38页| 久久久久久9999| 激情五月色婷婷| 日韩欧美一级精品久久| 亚洲成人影院麻豆| 国产91九色视频| 日韩大胆成人| 日本一区午夜艳熟免费| 国产在线不卡一卡二卡三卡四卡| 美国黑人一级大黄| 狠狠干狠狠久久| 熟妇人妻av无码一区二区三区 | 手机av在线| 成人免费观看网站| 午夜国产精品视频| 99精品视频国产| 中文字幕中文在线不卡住| 337p粉嫩色噜噜噜大肥臀| 亚洲男人天堂2019| 国产社区精品视频| 国产一区二区三区无遮挡 | 国产精品福利一区二区| 一级黄色在线观看| 亚洲图片欧洲图片av| 中文字幕人成乱码在线观看| 久久精品人成| 在线综合亚洲| 亚洲国产精品成人综合久久久| 亚洲一区二区三区中文字幕在线| 精品国产九九九| 欧美成人合集magnet| 精品久久亚洲| 成人一级生活片| 成人在线视频一区二区| 日韩精品视频免费播放| 亚洲精品一区二区三区精华液| 欧美xxxx黑人又粗又长| 国产日产精品一区二区三区四区| 今天的高清视频免费播放成人| 无码人妻少妇色欲av一区二区| 一区二区三区四区高清精品免费观看 | 黄色国产精品| 国产精品无码专区| 欧美性生活大片免费观看网址| 日韩在线视频第一页| 911国产网站尤物在线观看| 亚洲男人都懂第一日本| 日韩在线第三页| 中文字幕精品一区二区三区精品| 在线免费一级片| 欧美成年人视频| 亚洲国产欧美在线观看| 人妻av中文系列| 国产三区在线成人av| 国产一区二区小视频| 欧美剧在线观看| 美国一区二区| 9久久婷婷国产综合精品性色| 亚洲欧洲美洲综合色网| 高h震动喷水双性1v1| 欧美制服第一页| 欧美疯狂party性派对| 在线观看一区二区三区视频| 午夜精品在线看| www免费网站在线观看| 69174成人网| 久久久久久久高潮| 亚洲天堂一级片| 亚洲加勒比久久88色综合| www.国产精品| 妞干网视频在线观看| 国产欧美日韩久久| 国产三区在线播放| 5566日本婷婷色中文字幕97| 97欧美在线视频| 亚洲视频在线播放免费| 欧美在线影院一区二区| 肉肉视频在线观看| 日韩一区二区三区高清| 国产成人av电影在线观看| 99re这里只有精品在线| 欧美夫妻性视频| 青青草成人影院| 91视频在线免费| 8x8x8国产精品| 伊人久久国产| 成人在线播放网址| 亚洲欧洲日韩女同|