国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#語法糖之第五篇: 泛型委托- Action<T>

2019-11-17 03:01:26
字體:
來源:轉載
供稿:網友

C#語法糖之第五篇: 泛型委托- Action<T>

  因為工作的原因(其實還是個人的惰性)昨天沒有給大家分享文章,然后這幾天也有很多園友也提出了他們報告的意見及指導,再次感謝這些兄弟們的照顧我 和支持,這個分類的文章我當時想的是把我的學習經驗和工作中用到的語法給大家分享給大家,希望能起到幫助的作用,但是本人也是個菜鳥,不是什么大神,所以 學習中也有不足的地方和沒有掃到的地方,這里對上次擴展方法語法糖的問題,擴展方法確實是3.0開始就有了,或許是我以前沒有用到,也沒有查詢欠缺,若要給大家帶來不便,請大家原諒,現在把標題也修改為C#語法糖了,這里給大家道歉,希望朋友們也一如既往的支持!下面就進入正題吧。

  Action<T>泛型委托:委托以參數形式傳遞方法,而不用顯式聲明自定義的委托。 封裝的方法必須與此委托定義的方法簽名相對應。 也就是說,封裝的方法必須具有一個通過值傳遞給它的參數,并且不能返回值。

通常,這種方法用于執行某個操作。

我們先撇開這個概念,先看一下例子,我們自己寫一下一個委托:

 1 public static class 泛型委托 2  3     { 4  5         public static void 打印學生信息(Student stu) 6  7         { 8  9             Console.WriteLine("學號:"+stu.StuNum+"姓名:"+stu.StuName+"年齡:"+stu.Age);10 11         }12 13         public static void 打印教師信息(Teacher teach)14 15         {16 17             Console.WriteLine("工號:" + teach.TeachNum + "姓名:" + teach.TeachName + "年齡:" + teach.Age);18 19         }20 21         public delegate void PRintMsg<T>(T t);22 23         public static void Teach<T>(this List<T> tList, PrintMsg<T> pt)24 25         {26 27             foreach (T t in tList)28 29             {30 31                 pt(t);32 33             }34 35         }36 37     }38 39     public class Student40 41     {42 43         public string StuNum { get; set; }44 45         public string StuName { get; set; }46 47         public int Age { get; set; }48 49     }50 51     public class Teacher52 53     {54 55         public string TeachNum { get; set; }56 57         public string TeachName { get; set; }58 59         public int Age { get; set; }60 61     }
View Code

以上為通過自己寫的泛型委托的實現,在看看調用代碼:

 1 List<Student> students=new List<Student>(); 2  3             students.Add(new Student{ StuNum = "001",StuName = "zhangsan",Age = 20}); 4  5             students.Add(new Student { StuNum = "002", StuName = "lisi", Age = 21 }); 6  7             students.Add(new Student { StuNum = "003", StuName = "wangwu", Age = 22 }); 8  9             List<Teacher> teacher=new List<Teacher>();10 11             teacher.Add(new Teacher{TeachNum = "004",TeachName = "teacher1",Age = 50});12 13             teacher.Add(new Teacher { TeachNum = "005", TeachName = "teacher2", Age = 51 });14 15             teacher.Add(new Teacher { TeachNum = "006", TeachName = "teacher3", Age = 52 });16 17             students.Teach(泛型委托.打印學生信息);18 19             teacher.Teach(泛型委托.打印教師信息);20 21             Console.ReadLine();
View Code

輸出代碼如下:

以上例子是自己寫的list〈T〉的內容循環并輸出代碼,代碼隨少但表表現出來泛型委托。大家理解了上面的例子后其實就對Action〈T〉內置委托的實現方式有了基本的了解了。

我們把上面的代碼改造為內置委托方式實現,這里我們用List<T>的ForEach()來舉例子:

1 public void ForEach(Action<T> action);
View Code

這是微軟定義的方法,其實這個跟上面的Teach<T>類似

 1 List<Student> students=new List<Student>(); 2  3             students.Add(new Student{ StuNum = "001",StuName = "zhangsan",Age = 20}); 4  5             students.Add(new Student { StuNum = "002", StuName = "lisi", Age = 21 }); 6  7             students.Add(new Student { StuNum = "003", StuName = "wangwu", Age = 22 }); 8  9             List<Teacher> teacher=new List<Teacher>();10 11             teacher.Add(new Teacher{TeachNum = "004",TeachName = "teacher1",Age = 50});12 13             teacher.Add(new Teacher { TeachNum = "005", TeachName = "teacher2", Age = 51 });14 15             teacher.Add(new Teacher { TeachNum = "006", TeachName = "teacher3", Age = 52 });16 17             students.Teach(泛型委托.打印學生信息);18 19             teacher.Teach(泛型委托.打印教師信息);20 21             Console.WriteLine("-------------------------------以下是系統內置委托打印");22 23             students.ForEach(泛型委托.打印學生信息);24 25             teacher.ForEach(泛型委托.打印教師信息);26 27             Console.ReadLine();
View Code

以上代碼可以看出來整個調用方式都差不多,只是把Teach方式換成內部方法ForEach而已。

在上面方法中打印學生信息和打印教師信息只是就在這一個地方使用,所以我們結合上上篇文章中寫的匿名方法來些這兩個打印的方法。所以調用方法代碼如下:

 1 teacher.ForEach(new Action<Teacher>(delegate(Teacher t) 2  3                 { 4  5                     Console.WriteLine("工號:" + t.TeachNum + "姓名:" + t.TeachName + "年齡:" + t.Age); 6  7                 })); 8  9             students.ForEach(new Action<Student>(delegate(Student s)10 11             {12 13                 Console.WriteLine("工號:" + s.StuNum + "姓名:" + s.StuName + "年齡:" + s.Age);14 15             }));
View Code

輸出代碼如下:

QQ+Tn4EzT2NzWMf+VgUFhYqKCgaDkZiY+BtezFEoLCzU0NCA/6TRaAMDAzwej8vlcrlcHo83ODiIlBZzc/MrV67w+Xwegr29vfz8/Ld52iUlJf39/UNDQ6Ghob/yo5SVlSUSiaqqKnIjgUDo7e3t6enh8XhKSkqenp59fX3gLWNj45mZmV/5pSgoKChS/DHyA0GQqqrqyZMnf6vL+P3Q0dEJCwuT2ujg4ODq6vqHnM+vR1ZWNiYmRk5O7pB98Hh8cHAweK2qqhodHf1WTu2Y+Pj4SM3Pjg6JRKqqqqpEUFVVlZ2dLS8vj9xNV1c3JCTkjT6ZTCYTicTw8HAlJaX97zo6OiL/CRGJxD/5v6js7Oympib4XwWMj4+PlZWV1EYMBvO64YqOjtbS0jr694aFhampqe3f7uzsTCKRjv45KH9CfqX8YP7o80f5dyQxMRG51NnZ2RkfHw9eu7i49Pf3c17R2dnZ2dnJQQDmuAYGBmD/6urqgYGBBARJSUlnzpyRWv51cnISiUTgNZVKFQgE4NN4PF5HRwd4PoaEhPj7+8OHlJSUFBYWuri4MBgMGRkZqUvIz8+vrKyE/ywsLKTT6b/ZAP1qsFhsTU0Nn8/ncDhsNruzszMrKys3N3e/RnZ0dCQkJCC3pKeni8Xiu3fvSq2rAzw8PGpqapSVlQ/8XgqFYmFhgdwyOTlpamq6f8+KioqSkpIjXo6bm9vo6Ki1tfUR90d5OxxNftpR+UH54zE2NmYymRAEmZubNzc3W1tbYzAYCIJYLFZUVBTYR0dHx8fHx+MVLS0tAoHAA4Gnp6enpyc8I2EwGGlpabI/Z3h42NDQEPnVVlZWPB4PvLa3t/f29oY/zc3NDUwljY2N2Wy2h4cHBEFYLLaiooJOpyspKc3NzZmamuro6Ojq6srKykIQ5OPjw+Vy7ezsdHR0wIM4LS2NxWLp6Ohoa2srKiq+nfE8HGtrazKZ7OjoKBQKaTTa63arrq4ODAyEIKinp0c

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临沂市| 射洪县| 偏关县| 大港区| 松滋市| 宜城市| 称多县| 佛学| 密云县| 宕昌县| 稷山县| 垫江县| 资源县| 龙州县| 康马县| 日土县| 广宗县| 新闻| 睢宁县| 嵊州市| 会理县| 白银市| 平山县| 屏南县| 岳阳县| 运城市| 桃源县| 达州市| 永嘉县| 潜山县| 海兴县| 山阳县| 亳州市| 寿光市| 芒康县| 石家庄市| 都匀市| 长兴县| 信丰县| 阿坝| 乳山市|