<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

       
       
      C#委托基礎1——委托基礎
       

      委托和其委托的方法必須具有相同的簽名。簽名相同:1.參數類型相同 2.參數數量相同 3.返回值一致

      例一

      1. class Program  
      2. {  
      3.         public delegate int MathMethod(int x, int y);  
      4.          
      5.         public int Add(int a, int b)  
      6.         {  
      7.             return a + b;  
      8.         }  
      9.  
      10.         static void Main(string[] args)  
      11.         {  
      12.             MathMethod mm;  
      13.             Program p = new Program();  
      14.             mm = p.Add;// 相當于一個方法的容器  
      15.             Console.WriteLine("計算結果為{0}",mm(7,6));  
      16.             Console.ReadLine();  
      17.         }  

      例二

       

      1. class Program  
      2. {  
      3.          
      4.         public delegate double MathMethod(double x, double y);  
      5.  
      6.         double Add(double a, double b)  
      7.         {  
      8.             return a + b;  
      9.         }  
      10.  
      11.         double Subtract(double a, double b)  
      12.         {  
      13.             return a + b;  
      14.         }  
      15.  
      16.         double Multiply(double a, double b)  
      17.         {  
      18.             return a * b;  
      19.         }  
      20.  
      21.         double Divide(double a, double b)  
      22.         {  
      23.             return a / b;  
      24.         }  
      25.  
      26.         void DoCalculate(MathMethod mm)  
      27.         {  
      28.             Console.WriteLine("請輸入第一個數");  
      29.             double x = Convert.ToDouble(Console.ReadLine());  
      30.  
      31.             Console.WriteLine("請輸入第二個數");  
      32.             double y = Convert.ToDouble(Console.ReadLine());  
      33.  
      34.             Console.WriteLine("結果{0}",mm(x, y));  
      35.             Console.ReadLine();  
      36.              
      37.         }  
      38.  
      39.         static void Main(string[] args)  
      40.         {  
      41.             MathMethod mm;  
      42.             Program p = new Program();  
      43.             mm = p.Divide;  
      44.             p.DoCalculate(mm);  
      45.         }  

       

       -----------------------------------------------------------

       

      C#委托基礎2——多路委托

      多路委托

      1. class Program  
      2.     {  
      3.         public delegate void SayThingToS(string s);  
      4.  
      5.         void SayHello(string s)  
      6.         {  
      7.             Console.WriteLine("你好{0}", s);  
      8.         }  
      9.  
      10.         void SayGoodBye(string s)  
      11.         {  
      12.             Console.WriteLine("再見{0}", s);  
      13.         }  
      14.  
      15.         static void Main(string[] args)  
      16.         {  
      17.             // 方式一  
      18.             SayThingToS say1, say2, say3, say4;  
      19.             Program p = new Program();  
      20.             say1 = p.SayHello;  
      21.             say1("xy"); // 你好xy  
      22.  
      23.             say2 = p.SayGoodBye;  
      24.             say2("xy"); // 再見xy  
      25.  
      26.             say3 = say1 + say2;  
      27.             say3("xy"); // 你好xy,再見xy  
      28.  
      29.             say4 = say3 - say1;  
      30.             say4("xy"); // 再見xy  
      31.  
      32.  
      33.             // 方式二  
      34.             SayThingToS s1 = new SayThingToS(p.SayHello);  
      35.             s1 += new SayThingToS(p.SayGoodBye);  
      36.             s1("xy"); // 你好xy,再見xy  
      37.  
      38.             SayThingToS s2 = new SayThingToS(p.SayHello);  
      39.             s2 += new SayThingToS(p.SayGoodBye);             
      40.             s2 -= new SayThingToS(p.SayHello);  
      41.             s2("xy"); // 再見xy  
      42.         }  
      43.     } 

       

       -----------------------------------------------------------

       

      C#委托基礎3——泛型委托

      泛型委托

       

      1. class Program  
      2. {  
      3.         // 泛型委托,與普通委托類似,不同之處只在于使用泛型委托要指定泛型參數          
      4.         public delegate T MyGenericDelegate<T>(T obj1,T obj2);  
      5.  
      6.         int AddInt(int x, int y)  
      7.         {  
      8.             return x + y;  
      9.         }  
      10.  
      11.         string AddString(string s1, string s2)  
      12.         {  
      13.             return s1 + s2;  
      14.         }  
      15.          
      16.         static void Main(string[] args)  
      17.         {  
      18.             Program p = new Program();  
      19.              
      20.             MyGenericDelegate<int> intDel;  
      21.             intDel = p.AddInt;  
      22.             Console.WriteLine("int代理的值是{0}", intDel(100, 200));  
      23.  
      24.             MyGenericDelegate<string> stringDel;  
      25.             stringDel = p.AddString;  
      26.             Console.WriteLine("string代理的值是{0}", stringDel("aaa""bbb"));  
      27.         }  

      為了方便開發,.NET基類庫針對在實際開發中最常用的情形提供了幾個預定義好的委托,這些預定義委托用得很廣,比如在編寫lambda表達式和開發并行計算程序時經常要用到他們。就是下面我的幾篇博客需要介紹的內容。

       

       -----------------------------------------------------------

       

      C#委托基礎4——泛型委托Func

      為了方便開發,.NET基類庫針對在實際開發中最常用的情形提供了幾個預定義好的委托,這些預定義委托用得很廣,比如在編寫lambda表達式和開發并行計算程序時經常要用到他們。

      預定義泛型委托Func

      1. class Program  
      2. {  
      3.         double AddInt(int x, int y)  
      4.         {  
      5.             return x + y;  
      6.         }  
      7.  
      8.         string AddString(string s1, string s2)  
      9.         {  
      10.             return s1 + s2;  
      11.         }  
      12.  
      13.         static void Main(string[] args)  
      14.         {  
      15.             Program p = new Program();  
      16.  
      17.             // 以為前兩個參數為int,他們運行的結果為double,最后一個參數與AddInt返回值一致  
      18.             Func<intintdouble> funcInt = p.AddInt;  
      19.             Console.WriteLine("funcInt的值為{0}", funcInt(100300));  
      20.  
      21.             Func<string, string, string> funcString = p.AddString;  
      22.             Console.WriteLine("funcString的值為{0}", funcString("aaa""bbb"));  
      23.         }  

       

       -----------------------------------------------------------

       

      C#委托基礎5——泛型委托Action

      為了方便開發,.NET基類庫針對在實際開發中最常用的情形提供了幾個預定義好的委托,這些預定義委托用得很廣,比如在編寫lambda表達式和開發并行計算程序時經常要用到他們


      對于函數返回值為空的情形,可以使用Action泛型委托

      1. class Program  
      2. {  
      3.         // 對于函數返回值為空的情形,可以使用Action泛型委托  
      4.         void Showstring(string s)  
      5.         {  
      6.             Console.WriteLine("顯示的string值為{0}",s);  
      7.         }  
      8.  
      9.         static void Main(string[] args)  
      10.         {  
      11.             Program p = new Program();  
      12.  
      13.             Action<string> showstring = p.Showstring;  
      14.             showstring("xy");  
      15.         }  

       

       -----------------------------------------------------------

       

      C#委托基礎6——泛型委托Predicate
       

      此委托返回一個bool值,該委托通常引用一個"判斷條件函數"。

      需要指出的是,判斷條件一般為“外部的硬性條件”,比如“大于50”,而不是由數據自身指定,不如“查找數組中最大的元素就不適合”。

      例一

      1. class Program  
      2. {  
      3.         bool IsGreaterThan50(int i)  
      4.         {  
      5.             if (i > 50)   
      6.                 return true;  
      7.             else 
      8.                 return false;  
      9.         }  
      10.  
      11.         static void Main(string[] args)  
      12.         {  
      13.             Program p=new Program();  
      14.  
      15.             List<int> lstInt = new List<int>();  
      16.             lstInt.Add(50);  
      17.             lstInt.Add(80);  
      18.             lstInt.Add(90);  
      19.  
      20.             Predicate<int> pred = p.IsGreaterThan50;  
      21.             int i = lstInt.Find(pred);                         // 找到匹配的第一個元素,此處為80  
      22.             Console.WriteLine("大于50的第一個元素為{0}",i);  
      23.  
      24.             List<int> all = lstInt.FindAll(pred);  
      25.             for (int j = 0; j < all.Count(); j++)  
      26.             {  
      27.                 Console.WriteLine("大于50的數組中元素為{0}", all[j]);  // 找出所有匹配條件的  
      28.             }  
      29.             Console.ReadLine();  
      30.         }  
      31. }  
      32.  

      例二

      1. class Staff  
      2. {  
      3.         private double salary;  
      4.  
      5.         public double Salary  
      6.         {  
      7.             get { return salary; }  
      8.             set { salary = value; }  
      9.         }  
      10.  
      11.         private string num;  
      12.  
      13.         public string Num  
      14.         {  
      15.             get { return num; }  
      16.             set { num = value; }  
      17.         }  
      18.  
      19.         public override string ToString()  
      20.         {  
      21.             return "Num......" + num + "......" + "......" + "Salary......" + salary;  
      22.         }  
      23. }  
      24.  
      25.  
      26. class Program  
      27. {  
      28.         bool IsSalaryGreaterThan5000(Staff s)  
      29.         {  
      30.             if (s.Salary > 5000)  
      31.                 return true;  
      32.             else 
      33.                 return false;  
      34.         }  
      35.  
      36.         static void Main(string[] args)  
      37.         {  
      38.             Program p = new Program();  
      39.  
      40.             List<Staff> allStaff = new List<Staff>  
      41.             {  
      42.                 new Staff{Num="001",Salary=9999.9},  
      43.                 new Staff{Num="002",Salary=8991},  
      44.                 new Staff{Num="003",Salary=10000.8},  
      45.                 new Staff{Num="004",Salary=4999.99}  
      46.             };  
      47.  
      48.             Predicate<Staff> s = p.IsSalaryGreaterThan5000;  
      49.             Staff theFirstOne = allStaff.Find(s);  
      50.             Console.WriteLine(theFirstOne);              // 找出第一個  
      51.              
      52.             List<Staff> all = allStaff.FindAll(s);  
      53.             for (int i = 0; i < all.Count(); i++)  
      54.             {  
      55.                 Console.WriteLine(all[i]);               // 找出所有滿足條件的  
      56.             }  
      57.             Console.ReadLine();  
      58.         }  
      59. }  
      60.  

       -----------------------------------------------------------

       

      C#委托基礎7——匿名方法
       
       
      1. class Program  
      2. {  
      3.         double AddInt(int x, int y)  
      4.         {  
      5.             return x + y;  
      6.         }  
      7.  
      8.         string AddString(string s1, string s2)  
      9.         {  
      10.             return s1 + s2;  
      11.         }  
      12.  
      13.         static void Main(string[] args)  
      14.         {  
      15.             Program p = new Program();、  
      16.  
      17.             // 以為前兩個參數為int,他們運行的結果為double,最后一個參數與AddInt返回值一致  
      18.             Func<intintdouble> funcInt = p.AddInt;  
      19.             Console.WriteLine("funcInt的值為{0}", funcInt(100, 300));  
      20.  
      21.             Func<stringstringstring> funcString = p.AddString;  
      22.             Console.WriteLine("funcString的值為{0}", funcString("aaa""bbb"));  
      23.  
      24.             // 匿名方法  
      25.             Func<floatfloatfloat> fucFloat = delegate(float x, float y)  
      26.             {  
      27.                 return x + y;  
      28.             };  
      29.             Console.WriteLine("funcFloat的值為{0}", fucFloat(190.7F, 99999.9F));  
      30.             Console.ReadLine();  
      31.         }  
      32. }  

       -----------------------------------------------------------

       

      C#委托基礎8——lambda表達式

      1. class Program  
      2. {  
      3.         double AddInt(int x, int y)  
      4.         {  
      5.             return x + y;  
      6.         }  
      7.  
      8.         string AddString(string s1, string s2)  
      9.         {  
      10.             return s1 + s2;  
      11.         }  
      12.  
      13.         static void Main(string[] args)  
      14.         {  
      15.             Program p = new Program();             
      16.  
      17.             // 以為前兩個參數為int,他們運行的結果為double,最后一個參數與AddInt返回值一致  
      18.             Func<intintdouble> funcInt = p.AddInt;  
      19.             Console.WriteLine("funcInt的值為{0}", funcInt(100, 300));  
      20.  
      21.             Func<stringstringstring> funcString = p.AddString;  
      22.             Console.WriteLine("funcString的值為{0}", funcString("xy""xy"));  
      23.  
      24.  
      25.             // 匿名方法  
      26.             Func<floatfloatfloat> fucFloat = delegate(float x, float y)  
      27.             {  
      28.                 return x + y;  
      29.             };  
      30.             Console.WriteLine("funcFloat的值為{0}", fucFloat(190.7F, 99999.9F));  
      31.  
      32.             // Lambda表達式  
      33.             Func<stringstringstring> funString2 = (x, y) => (x + y);  
      34.             Console.WriteLine("funString2的值為{0}", funString2("xy""xy"));  
      35.             Console.ReadLine();  
      36.         }  

       

       -----------------------------------------------------------

       

      C#委托基礎9——Invoke與委托

      例一

      1. delegate void AppendStringCallback(string text);  
      2.  
      3. private void AppendString(string txt)  
      4. {  
      5.      this.listView1.Items.Add(txt);  
      6. }  
      7.  
      8.  
      9. private void ReceiveDate()  
      10. {  
      11.      AppendStringCallback appendStringCallback = new AppendStringCallback(AppendString);  
      12.      this.Invoke(appendStringCallback, new object[]   
      13.                    { string.Format("{0},{1},{2}", str1, str2 + "號", iepAddress.ToString()) });  
      14. }  
      15.  

       

      例二

      1. namespace ThreadPoolDemo    
      2. {    
      3.     public partial class ThreadForm : Form    
      4.     {    
      5.         // 定義delegate以便Invoke時使用    
      6.         private delegate void SetProgressBarValue(int value);     
      7.          
      8.  
      9.         // 跟SetProgressBarValue委托相匹配的方法    
      10.         private void SetProgressValue(int value)    
      11.         {    
      12.            progressBar.Value = value;    
      13.         }    
      14.  
      15.         // 使用Invoke方法來設置進度條    
      16.         private void RunWithInvoke()    
      17.         {    
      18.             int value = progressBar.Value;    
      19.             while (value< progressBar.Maximum)    
      20.             {    
      21.                 // 如果是跨線程調用    
      22.                 if (InvokeRequired)    
      23.                 {    
      24.                     this.Invoke(new SetProgressBarValue(SetProgressValue), value++);    
      25.                 }    
      26.                 else   
      27.                 {    
      28.                     progressBar.Value = ++value;    
      29.                 }    
      30.             }    
      31.         }     
      32.  
      33.         public ThreadForm()    
      34.         {    
      35.             InitializeComponent();    
      36.         }     
      37.       
      38.         private void btnInvoke_Click(object sender, EventArgs e)    
      39.         {    
      40.             progressBar.Value = 0;    
      41.             Thread thread = new Thread(new ThreadStart(RunWithInvoke));    
      42.             thread.Start();    
      43.         }     
      44.  
      45.      }    
      46. }   

       -----------------------------------------------------------

       

      C#委托基礎系列原于2011年2月份發表在我的新浪博客中,現在將其般至本博客。

      本文出自 “IT徐胖子的專欄” 博客,請務必保留此出處http://woshixy.blog.51cto.com/5637578/1070976

      posted on 2013-10-07 04:09  hrx521  閱讀(256)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 蜜桃av多人一区二区三区| av无码精品一区二区乱子| 丁青县| 欧美牲交a欧美牲交aⅴ免费| 国产精品白丝一区二区三区| 日韩国产欧美精品在线| 亚洲国产精品男人的天堂| 成人年无码av片在线观看| 苍井空一区二区波多野结衣av| 久青草国产在视频在线观看| 亚洲日本韩国欧美云霸高清| 色噜噜在线视频免费观看| 99RE8这里有精品热视频| av永久免费网站在线观看| 国产白嫩护士在线播放| 靖远县| 国产成人片无码视频在线观看 | 中文字幕av日韩有码| 四川少妇被弄到高潮| 亚洲精品香蕉一区二区| 国产福利社区一区二区| 国产成人精品一区二三区在线观看| 国内自拍偷拍福利视频看看| 国产精品一区在线蜜臀| 久久精品一本到99热免费| 亚洲av噜噜一区二区| 精品不卡一区二区三区| 久久精品国产亚洲av麻豆软件| 成人网站免费在线观看| 久久精品国产亚洲AV成人毛片| 中文字幕亚洲精品乱码| 久久久天堂国产精品女人| 欧美影院成年免费版| 天美传媒一区二区| 日本道不卡一二三区视频| 国产精品 自在自线| 麻豆一区二区中文字幕| 国产亚洲一区二区三不卡| 麻豆国产成人AV在线播放| 韩国美女福利视频一区二区| 曰韩亚洲AV人人夜夜澡人人爽|