国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

關于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機器學習

2024-03-21 08:57:39

語言軟件開發

2014-06-20 14:35:48

浪潮數據

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

網絡安全趨勢

2015-01-15 09:34:28

點贊
收藏

51CTO技術棧公眾號

蜜桃传媒一区二区三区| 亚洲欧美视频| 国内偷自视频区视频综合| 91成人噜噜噜在线播放| 午夜精品在线视频| 精品一区亚洲| 亚洲一区二区免费在线| 国产精品色网| 日本xxx免费| 久久精品亚洲一区二区三区浴池 | 国产高清不卡无码视频| 99免费精品在线观看| 色婷婷成人在线| 亚洲国产综合色| 日本美女在线中文版| 欧美精品一区二区高清在线观看 | 波多野结衣家庭教师在线| 日本一区二区三区dvd视频在线| 国产剧情演绎av| 欧洲人成人精品| 国模冰冰炮一区二区| 91高清视频免费观看| 国产精品99一区二区| 天天做天天爱天天高潮| 最新日韩在线视频| 国产三级视频在线看| 亚洲欧美制服丝袜| 婷婷激情久久| 欧洲一区二区日韩在线视频观看免费 | 一区二区三区四区高清精品免费观看| 亚洲欧洲一区| а√天堂资源官网在线资源| 国产精品免费av| 中文字幕在线免费观看| 日韩午夜av电影| 日本在线视频一区二区三区| www.成人三级视频| 久久一二三四| 99热热99| 欧美va亚洲va国产综合| 亚洲精品a区| 久久久久久一区| 成人国产亚洲欧美成人综合网| 91九色单男在线观看| 国产乱理伦片在线观看夜一区| 久久mv成人精品亚洲动漫| 欧美一区二区视频免费观看| 成人涩涩网站| 亚洲日本理论电影| 亚洲午夜久久久久| 国产精品蜜月aⅴ在线| 国产精品一区免费观看| 国产欧美一区二区精品婷婷| 麻豆tv入口在线看| 欧美孕妇与黑人孕交| 国产麻豆精品久久一二三| 一区二区三区四区在线免费视频 | 色鬼7777久久| 久久久久99精品久久久久| 亚洲激情黄色| ·天天天天操| 中文欧美在线视频| 99热在线成人| 91在线视频观看免费| 日韩无一区二区| 成人一区二区| 无码人妻h动漫| 日韩成人在线电影网| 欧美电影《轻佻寡妇》| 手机看片福利盒子久久| 亚洲人成绝费网站色www| 亚洲美女啪啪| 性视频在线播放| 久久久999精品免费| 日韩高清不卡一区二区| 在线看片你懂的| 午夜精品久久久久久久99黑人| 国产一区二区在线看| 欧美高清视频| 成人国产在线视频| 国产精品成人免费在线| 欧美在线se| 成人在线视频一区二区三区| 538在线一区二区精品国产| 国产精品久久久久一区二区三区厕所 | 国产裸体免费无遮挡| 日韩av一区二区在线| 99视频精品免费观看| 中文字幕av高清在线观看| 久久久久久久久久久国产| bt欧美亚洲午夜电影天堂| 九色porny自拍视频在线播放| 久久综合入口| 一本到一区二区三区| 成人黄色av| 日韩视频免费观看高清在线视频| 桃花岛tv亚洲品质| 亚洲人一区二区| 日韩高清不卡av| 国产乱人伦偷精品视频免下载| 日韩激情电影免费看| 可以免费看的黄色网址| 亚洲的天堂在线中文字幕| 美国毛片一区二区| 亚洲一区资源| 91成人综合网| 久久久av免费| 欧美激情一二三区| av综合网页| 日本中文视频| 91影院在线免费观看视频| 欧美性受极品xxxx喷水| 亚洲一区成人| 亚洲优女在线| 欧美a在线视频| 国产成人精品国内自产拍免费看| 亚洲一二三区在线观看| 欧美午夜在线视频| heyzo高清中文字幕在线| 欧美一级欧美一级| 国产91av在线| 日本久久精品电影| 久久国产麻豆精品| 2020国产精品极品色在线观看| 婷婷丁香六月天| 国产伦精品一区二区三区照片| 精品美女一区二区| www精品美女久久久tv| 日韩成人精品一区| av超碰免费在线| wwwxxx黄色片| 91热福利电影| 亚洲女人天堂成人av在线| 亚洲欧洲日韩在线| 色天天综合网| 怡红院在线播放| 毛片在线播放视频| 国产精品视频网址| 91精品国产91综合久久蜜臀| 97精品国产露脸对白| 麻豆成人入口| 国产福利小视频在线观看| 手机在线观看国产精品| 亚洲人成电影在线播放| 亚洲激情六月丁香| 狠狠干综合网| 成人午夜视屏| 成人黄网18免费观看的网站| 成人黄色免费片| 欧美一三区三区四区免费在线看| 国产宾馆实践打屁股91| 国产毛片一区二区三区 | 榴莲视频成人app| 亚洲社区在线| 国产欧美综合精品一区二区| 中文字幕不卡av| 亚洲18色成人| 久久精品av麻豆的观看方式| 日本免费一区二区三区等视频| 交视频在线观看国产| 91麻豆桃色免费看| www.亚洲人.com| 色婷婷狠狠综合| 国产91精品入口| 91亚洲国产| 国产v综合v| 大地资源中文在线观看免费版| 嫩草影院中文字幕| 国产精品人人做人人爽| 精品亚洲男同gayvideo网站| 亚洲精品一二三四区| 国产美女一区| 91午夜精品| 亚洲伊人av| 在线黄色av| 国产96在线 | 亚洲| 亚洲最大福利网站| 久久久91精品| 欧美主播一区二区三区| 国产精品传媒| 超碰97免费在线| 国产一级黄色电影| 99久久久无码国产精品性色戒| 国产精品一二区| 久久久久久久一区二区| 欧美一级生活片| 色综合中文综合网| 91久色porny| 蜜臀av性久久久久av蜜臀妖精 | 五月婷婷综合色| 韩国三级av在线免费观看| 国产九九精品| 欧美日韩成人在线| 欧美亚洲三级| 国产成人ay| 欧美gay视频| 国产在线电影| 中文视频在线| www.亚洲高清| 国产av熟女一区二区三区|