亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#中的擴展方法學習筆記

2019-10-29 19:58:02
字體:
來源:轉載
供稿:網友

前言

最近在看王清培前輩的.NET框架設計時,當中有提到擴展方法 .

開頭的一句話是:擴展方法是讓我們在不改變類原有代碼的情況下動態地添加方法的方式,這給面向對象設計 模塊設計帶來了質的提升

很明顯,擴展方法在框架設計或者平時碼代碼中,是能夠提升我們整個架構的靈活性的

簡介

擴展方法被定義為靜態方法,但它們是通過實例方法語法進行調用的。 它們的第一個參數指定該方法作用于哪個類型,并且該參數以 this 修飾符為前綴。 擴展方法當然不能破壞面向對象封裝的概念,所以只能是訪問所擴展類的public成員。

擴展方法使您能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。

C#擴展方法第一個參數指定該方法作用于哪個類型,并且該參數以 this 修飾符為前綴。

擴展方法的目的就是為一個現有類型添加一個方法,現有類型既可以是int,string等數據類型,也可以是自定義的數據類型。

一..net自帶擴展方法和自定義擴展方法

在使用linq時就能夠使用到很多.net自帶的擴展方法,比如where select等等

where的擴展方法定義 

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

Select的擴展方法定義

public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector);

(1)自己實現where和select的擴展方法

// where自實現 public static IEnumerable<TSource> ExtenSionWhere<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {  if (source == null)  {  throw new Exception(nameof(source));  }  if (predicate == null)  {  throw new Exception(nameof(predicate));  }  List<TSource> satisfySource = new List<TSource>();  foreach (var sou in source)  {  if (predicate(sou))  {   satisfySource.Add(sou);  }  }  return satisfySource; }  // select 自實現 public static IEnumerable<TResult> ExtenSionSelect<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector) {  if(source==null)  {  throw new Exception(nameof(source));  }  if(selector==null)  {  throw new Exception(nameof(source));  }  List<TResult> resultList = new List<TResult>();  foreach(var sou in source)  {  resultList.Add(selector(sou));  }  return resultList; }

(2)自實現where和select調用

static void Main(string[] args) {  List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 };    //常規寫法  var selectList = list.ExtenSionWhere(p => p > 3).ExtenSionSelect(p => p.ToString()).ToList();   //自定義泛型委托寫法  Func<int, bool> whereFunc = (num) => num > 3;  Func<int, string> selectFunc = (num) => num.ToString();  var selectList1 = list.ExtenSionWhere(p => whereFunc(p)).ExtenSionSelect(p => selectFunc(p)).ToList();  }

二.使用擴展方法實現鏈式編程

我在項目中經常使用開源的Flurl進行http請求,在進行拼裝請求報文時,就會使用到鏈式編程

如下代碼所示

c#,擴展方法

以上代碼就是使用了擴展方法進行鏈式編程,從而使得整個請求信息可以在一句代碼中體現出來

接下來,我們自己實現鏈式代碼

public static class ContextExtension {  public static RectangleContext SetLength(this RectangleContext context,int num)  {   RectangleContext.Config.Length = num;   return context;  }  public static RectangleContext SetWideth(this RectangleContext context, int num)  {   RectangleContext.Config.Wideth = num;   return context;  }  public static RectangleContext SetHeight(this RectangleContext context, int num)  {   RectangleContext.Config.Height = num;   return context;  } } public class RectangleContext {  public static RectangleContext Config=new RectangleContext();  public int Length { get; set; }  public int Wideth { get; set; }  public int Height { get; set; } }

調用和執行結果

 c#,擴展方法

總結

1.使用擴展方法能在不修改原有類型的基礎下,動態添加方法,這使得整個框架更具有靈活性

2.在使用上下文信息的時候,可以使用鏈式編程,使得調用時能夠在一句代碼中完成所有屬性設置

3.擴展方法不能濫用.添加擴展方法應當使用最小影響原則,即盡量不要在父類使用擴展方法,比如object,這將影響性能

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品成人va在线观看| 国产精品午夜一区二区欲梦| 九九久久精品一区| 另类图片亚洲另类| 色先锋久久影院av| 欧美黑人xxx| 亚洲国模精品私拍| 欧美日韩高清区| 精品视频www| 日韩小视频在线观看| 亚洲精品狠狠操| 亚洲欧美日韩在线一区| 欧美性jizz18性欧美| 日韩电影免费观看在线观看| 亚洲国产成人精品电影| 中文字幕在线看视频国产欧美在线看完整| 国产aⅴ夜夜欢一区二区三区| 91影视免费在线观看| 北条麻妃一区二区在线观看| 国产精品www网站| 亚洲激情视频在线观看| 久久精品免费电影| 亚洲欧美激情视频| 高跟丝袜欧美一区| 欧美日韩国产区| 成人av在线天堂| 国产精品99免视看9| 91麻豆桃色免费看| 欧美日韩亚洲一区二| 4444欧美成人kkkk| 亚洲天堂日韩电影| 亚洲影院高清在线| 亚洲福利视频网站| 欧美日韩999| 亚洲欧美一区二区三区情侣bbw| 欧美成人剧情片在线观看| 欧美日韩亚洲系列| 在线免费观看羞羞视频一区二区| 亚洲a级在线观看| 欧美剧在线观看| 亚洲一区中文字幕| 日韩精品极品毛片系列视频| 狠狠做深爱婷婷久久综合一区| 国产综合久久久久| 欧美人与物videos| 在线观看亚洲区| 日韩在线观看视频免费| 欧美日韩午夜激情| 一级做a爰片久久毛片美女图片| 国产精品海角社区在线观看| 免费av在线一区| 一区二区三区在线播放欧美| 欧美日韩中国免费专区在线看| 国产精品wwww| 亚洲欧美国产一区二区三区| 欧美精品videofree1080p| 欧美裸体xxxxx| 国产精品999| 日韩毛片在线看| 精品福利在线视频| 久久免费少妇高潮久久精品99| 亚洲精品资源在线| 国产精品美女久久久久av超清| 欧美精品九九久久| 日本久久精品视频| 中文字幕日韩在线观看| 亚洲天堂色网站| 川上优av一区二区线观看| 日韩欧美主播在线| 欧美亚洲国产视频| 国产精品嫩草视频| 国模私拍视频一区| 成人有码在线播放| 久久久国产一区二区| 丝袜亚洲另类欧美重口| 亚洲精品久久久久久久久久久久久| 国产91ⅴ在线精品免费观看| 91精品国产综合久久男男| 国产亚洲精品久久久久久牛牛| 国产亚洲精品久久久久久777| 国产精品视频在线播放| 久久综合免费视频| 久久色精品视频| 日韩视频免费在线| 91香蕉亚洲精品| 91超碰caoporn97人人| 热re99久久精品国产66热| 色噜噜狠狠色综合网图区| 欧美亚洲国产成人精品| 久久亚洲精品中文字幕冲田杏梨| 欧美午夜丰满在线18影院| 国产视频久久久久久久| 欧美色视频日本高清在线观看| 久久久久久av| 国产美女精品免费电影| 欧美在线激情视频| 国产亚洲成av人片在线观看桃| 国产精品爱啪在线线免费观看| 九九九热精品免费视频观看网站| 久久国产精品久久国产精品| 日韩中文字幕网| 播播国产欧美激情| 亚洲a级在线观看| 国内精品久久影院| 激情成人中文字幕| 国产精品九九久久久久久久| 欧美黑人xxx| 亚洲开心激情网| 日韩电影免费观看在线观看| 日韩欧美成人精品| 欧美一性一乱一交一视频| 亚洲天堂一区二区三区| 国产91ⅴ在线精品免费观看| 狠狠色狠色综合曰曰| 91精品国产综合久久香蕉| 欧美一区二区视频97| 正在播放亚洲1区| 日韩欧美在线第一页| 欧美激情国产日韩精品一区18| 欧美日韩在线视频首页| 国产精品第一视频| 亚洲永久免费观看| 中文字幕欧美日韩在线| 亚洲精品成人av| 亚洲国产一区二区三区四区| 高跟丝袜一区二区三区| 国产日本欧美视频| 亚洲国产日韩欧美在线动漫| 日韩综合中文字幕| 成人免费视频网址| 欧日韩不卡在线视频| yw.139尤物在线精品视频| 欧美亚洲一区在线| 亚洲性生活视频在线观看| 欧美高跟鞋交xxxxxhd| 久久精品视频播放| 国产成人精品久久久| 日韩免费观看高清| 久国内精品在线| 亚洲理论在线a中文字幕| 国产成人久久精品| 97超碰蝌蚪网人人做人人爽| 精品动漫一区二区三区| 97在线精品视频| 日韩免费观看高清| 亚洲最大的av网站| 国产伊人精品在线| 国产91色在线|| 欧美视频一二三| 国产精品久久久久不卡| 欧美性猛交xxxx黑人猛交| 国产大片精品免费永久看nba| 日韩av一区二区在线| 久久久91精品| 北条麻妃在线一区二区| 亚洲欧美日韩中文在线制服| 国产精品老牛影院在线观看| 日本欧美一级片| 亚洲欧美一区二区三区久久| 久久久久久高潮国产精品视| 国产成人精品电影| 2020欧美日韩在线视频| 国产欧美va欧美va香蕉在线| 欧美亚洲在线观看|