日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第八节:语法总结(2)(匿名类、匿名方法、扩展方法)

發布時間:2023/12/10 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第八节:语法总结(2)(匿名类、匿名方法、扩展方法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. 匿名類

?1. 傳統的方式給類賦值,需要先建一個實體類→實例化→賦值,步驟很繁瑣,在.Net 3.0時代,微軟引入匿名類的概念,簡化了代碼編寫,提高了開發效率。

  ?匿名類的聲明語法: ?var obj=new {字段賦值};

  ?代碼如下:

1 // 匿名類(匿名類通過new關鍵字實現) 2 Console.WriteLine("------------------------------匿名類(匿名類通過new關鍵字實現)------------------------------"); 3 var test1 = new 4 { 5 id = "1", 6 name = "maru1" 7 }; 8 Console.WriteLine("id為{0},name為{1}", test1.id, test1.name);

  運行結果如下:

 2. 匿名類的屬性都是只讀的

1 { 2 // test1.id = "2"; //報錯 3 }

? 3. 匿名類的屬性共享機制

  A:屬性的名稱、類型和順序一致,那么它們共享一個泛型類。

  B:屬性的名稱和順序一致,但是屬性類型不同,那么它們還是共享一個泛型類,只是泛型參數改變了,所以運行時,會生成不同的類。

  C:如果數據型名稱和類型相同,但順序不同,那么編譯器會重新創建一個匿名類。

?代碼如下:

{var test1 = new{id = "1",name = "maru1"}; //1.屬性名稱、類型和順序都一致,那么默認共享前一個泛型類Console.WriteLine("------------------------------1.屬性類型和順序都一致,那么默認共享前一個泛型類------------------------------");var test2 = new{id = "2",name = "maru2"};Console.WriteLine(test1.GetType() == test2.GetType());//2.如果屬性名稱和順序一致,但屬性類型不同,那么還是共同使用一個泛型類,只是泛型參數改變了而已,所以在運行時會生成不同的類Console.WriteLine("---2.如果屬性名稱和順序一致,但屬性類型不同,那么還是共同使用一個泛型類,只是泛型參數改變了而已,所以在運行時會生成不同的類-----");var test3 = new{id = 2,name = "maru2"};Console.WriteLine(test1.GetType() == test3.GetType());//3.如果數據型名稱和類型相同,但順序不同,那么編譯器會重新創建一個匿名類Console.WriteLine("------------------------------3.如果數據型名稱和類型相同,但順序不同,那么編譯器會重新創建一個匿名類------------------------------");var test4 = new{name="maru4",id = "1"};Console.WriteLine(test1.GetType() == test4.GetType());}

 運行結果:

?  

二. 匿名方法

  1. 這里主要介紹匿名方法在委托中的使用,匿名方法的關鍵字為:delegate。

  2. 傳統委托的使用和.Net3.0時代匿名方法引入后的使用

1 public class MyDelegate2 {3 //1. 委托的聲明4 public delegate void NoReturnNoPara();5 public delegate int WithReturnNoPara();6 public delegate void NoReturnWithPara(int id, string name);7 public delegate MyDelegate WithReturnWithPara(DateTime time);8 9 //2. 委托的使用(在show方法中調用) 10 public void Show() 11 { 12 //以“有參無返回值委托”為例,介紹委托的各種用法 13 //2.1 用法一 14 { 15 NoReturnWithPara methord = new NoReturnWithPara(this.Test1); 16 methord.Invoke(1, "唐馬儒1"); 17 } 18 //2.2 用法二 19 { 20 NoReturnWithPara methord = this.Test1; 21 methord.Invoke(2, "唐馬儒2"); 22 } 23 //2.3 用法三 DotNet 2.0 時代 24 { 25 NoReturnWithPara methord = new NoReturnWithPara 26 ( 27 delegate(int id, string name) 28 { 29 Console.WriteLine("{0} {1}", id, name); 30 } 31 ); 32 methord.Invoke(3, "唐馬儒3"); 33 } 34 //2.4 用法四 DotNet 3.0 時代 35 { 36 NoReturnWithPara methord = new NoReturnWithPara 37 ( 38 (int id, string name) => 39 { 40 Console.WriteLine("{0} {1}", id, name); 41 } 42 ); 43 methord.Invoke(4, "唐馬儒4"); 44 } 45 //2.5 用法五 委托約束 46 { 47 NoReturnWithPara methord = new NoReturnWithPara 48 ( 49 (id,name) => 50 { 51 Console.WriteLine("{0} {1}", id, name); 52 } 53 ); 54 methord.Invoke(5, "唐馬儒5"); 55 } 56 //2.6 用法六 (如果方法體只有一行,可以去掉大括號和分好) 57 { 58 NoReturnWithPara methord = new NoReturnWithPara((id, name) => Console.WriteLine("{0} {1}", id, name)); 59 methord.Invoke(6, "唐馬儒6"); 60 } 61 //2.7 用法七 62 { 63 NoReturnWithPara methord = (id, name) => Console.WriteLine("{0} {1}", id, name); 64 methord.Invoke(7, "唐馬儒7"); 65 methord(7, "唐馬儒7"); 66 } 67 68 } 69 private void Test1(int id, string name) 70 { 71 Console.WriteLine("{0} {1}", id, name); 72 } 73 74 private void Test2() 75 { 76 Console.WriteLine("DoNothing"); 77 } 78 79 private void Test3() 80 { 81 Console.WriteLine("DoNothing"); 82 } 83 }

三. 擴展方法

  擴展方法即對一些類型進行方法的擴展,擴展方法的三要素為:靜態類、靜態方法、this關鍵字。

  使用方法:this后面的那個擴展類型.方法名。

  下面對string類型擴展,使其可以將string類型轉換成int類型,將MyExtend.ToInt(p1) 改裝成 p1.ToInt()。

  演示重載,并對lambda中的where進行模擬

? ?代碼如下

1 /// <summary>2 /// 擴展方法的三要素:靜態類、靜態方法、this關鍵字3 /// 使用方法:this關鍵后面對應的參數類型.擴展方法名4 /// </summary>5 public static class MyExtend6 {7 /// <summary>8 /// 1.對string類型進行擴展9 /// 將MyExtend.ToInt(p1) 改裝成 p1.ToInt() 10 /// </summary> 11 /// <param name="p1">需要轉換的string對象</param> 12 /// <returns></returns> 13 public static int ToInt(this string p1) 14 { 15 return Convert.ToInt32(p1); 16 } 17 18 /// <summary> 19 /// 2.對string類型進行擴展 20 /// 將p1這個string類型轉換成int類型,然后加上p2,最后輸出 21 /// 將MyExtend.ToInt(p1,p2) 改裝成 p1.ToInt(p2) 22 /// </summary> 23 /// <param name="p1">需要轉換的string對象</param> 24 /// <param name="p2">被加的數</param> 25 /// <returns></returns> 26 public static int ToInt(this string p1,int p2) 27 { 28 return Convert.ToInt32(p1)+p2; 29 } 30 /// <summary> 31 /// Lambda模式的where方法自己實現 32 /// </summary> 33 /// <typeparam name="TSource"></typeparam> 34 /// <param name="source"></param> 35 /// <param name="func"></param> 36 /// <returns></returns> 37 public static IEnumerable<TSource> YpfWhere<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> func) 38 { 39 List<TSource> studentList = new List<TSource>(); 40 foreach (TSource item in source) 41 { 42 bool bResult = func.Invoke(item); 43 if (bResult) 44 { 45 studentList.Add(item); 46 } 47 } 48 return studentList; 49 } 50 }

? ? ?方法調用:

1 Console.WriteLine("------------------------------ 三. 擴展方法----------------------------------");2 {3 {4 //3.1 對string類型兩個擴展方法的調用5 Console.WriteLine("------------------------------ 3.1 對string類型兩個擴展方法的調用----------------------------------");6 string msg1 = "123";7 //通過靜態方法調用8 Console.WriteLine(MyExtend.ToInt(msg1));9 //通過擴展方法調用 10 Console.WriteLine(msg1.ToInt()); 11 Console.WriteLine(msg1.ToInt(1)); 12 } 13 14 }

?  運行結果:

總結

以上是生活随笔為你收集整理的第八节:语法总结(2)(匿名类、匿名方法、扩展方法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 丁香花婷婷 | 苍井空张开腿实干12次 | 欧美一级特黄aaaaaa大片在线观看 | 亚洲视频在线观看网址 | 天天色小说 | 波多野结衣丝袜 | 在线香蕉视频 | 欧美成人一区二区三区片免费 | 日韩乱码一区二区 | 午夜一区二区三区在线 | 亚洲人成色777777老人头 | 来吧亚洲综合网 | 琪琪色视频 | 久操不卡 | 国产一区不卡 | 免费a在线观看 | 超碰2020| 国产成人无码精品久在线观看 | 大吊一区二区三区 | 三级网站免费 | 一级黄色片免费看 | 国产乱淫a∨片免费观看 | 欧美日韩成人网 | v天堂在线 | www.成人av.com| 福利在线网站 | 欧美在线视频精品 | 天天av网| 无码人妻久久一区二区三区 | 91一区二区 | 99久久99九九99九九九 | 91黑人精品一区二区三区 | 日本全黄裸体片 | 男女操操| 欧美性猛交xxx乱大交3蜜桃 | 美痴女~美人上司北岛玲 | 女生高潮视频在线观看 | 少妇肥臀大白屁股高清 | 99精品一区 | 国产视频在线观看一区二区 | 久久国产精品电影 | 67194在线免费观看 | 中出 在线 | 国产黄色在线免费观看 | 精品久久一区二区 | 亚欧洲精品在线视频免费观看 | 国产伦精品一区二区三区视频我 | 欧美日韩精品一区二区 | 男人日女人的网站 | 中出一区| 日本在线一区二区三区 | 深夜视频一区二区三区 | 国产美女91 | 日韩少妇内射免费播放18禁裸乳 | 精品国产露脸精彩对白 | 久久免费的精品国产v∧ | 红桃视频成人在线 | 无码人妻丰满熟妇区bbbbxxxx | sesese99| 久久99久久99精品蜜柚传媒 | 亚洲视频免费播放 | 亚洲综合成人在线 | 老司机综合网 | 91视频h | 成人特级片 | 日韩一级片免费观看 | 一区在线观看视频 | 一本到免费视频 | 免费看成人片 | 熟女少妇在线视频播放 | 特级黄色一级片 | 根深蒂固在线观看 | 91桃色免费视频 | 久久久久国产精品午夜一区 | 99久久99久久精品免费看蜜桃 | 一级黄色片看看 | 久久私人影院 | 免费午夜视频 | 天天看夜夜 | 色二区| 欧美第二区 | 欧美日韩第一页 | 欧美一级免费片 | 第一章婶婶的性事 | 在线日韩国产 | 国产精品成人免费 | 国产3级| 国产视频一区在线 | 精品国产一区二区三区四 | 麻豆国产一区二区 | 国产一区二区三区毛片 | 涩涩屋视频在线观看 | 秋霞午夜网 | 美国少妇性做爰 | 91久久久久久久久久久久 | 免费观看黄色一级片 | 艳母免费在线观看 | 成人国产亚洲 | 久久国产视频一区 |