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

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

[原創]擴展方法基本用法

2019-11-14 16:09:37
字體:
來源:轉載
供稿:網友

前言

   首先我們看看msdn上面的解釋:擴展方法使你能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。

其實說白了就是微軟那班哥們寫好的類庫,我們無法修改,但是我們可以給這些類庫通過一種方式添加我們的一些方法。

1.0 擴展方法應用場景

DateTime now = DateTime.Now;//1.0 將now格式化成yyyy-MM-dd 輸出string fmtstr = now.Tostring("yyyy-MM-dd");
//2.0 將now格式化成yyyy-MM-dd HH:mm:ss 輸出
string fmtstr1 = now.Tostring("yyyy-MM-dd");

  現在在這里只有一次沒有什么問題,假如在我們的系統中要用到成千上萬次了? 這個時候我們該怎么辦了,聰明的你,肯定想到了寫一個方法...

  public static class ExtHelper    {        public static string fmtDatayyyymmdd(DateTime now)        {            return now.ToString("yyyy-MM-dd");        }        public static string fmtDatayyyymmddhhmmss(DateTime now)        {            return now.ToString("yyyy-MM-dd HH:mm:ss");        }    }

經過改造,上面的代碼可以改寫為如下:

DateTime now = DateTime.Now;//1.0 將now格式化成yyyy-MM-dd 輸出string fmtstr = ExtHelper.fmtDatayyyymmdd(now);//2.0 將now格式化成yyyy-MM-dd HH:mm:ss 輸出string fmtstr1 =ExtHelper.fmtDatayyyymmddhhmmss(now);

可是程序員都是很懶的,那么我們必須把這個ExtHelper記住,想想我們還有沒有更好的方法,如果要是能夠now.方法名就很好了,擴展方法就能滿足我們的這個要求...

 2.0擴展方法三要素

擴展方法的寫法步驟:
1、必須放到靜態類中
2、方法必須是靜態方法
3、方法的第一個參數是類型參數,使用this 開頭

經過改造的ExtHelper

    public static class ExtHelper    {        public static string fmtDatayyyymmdd(this DateTime now)        {            return now.ToString("yyyy-MM-dd");        }        public static string fmtDatayyyymmddhhmmss(this DateTime now)        {            return now.ToString("yyyy-MM-dd HH:mm:ss");        }    }

調用如下:

DateTime now = DateTime.Now;//1.0 將now格式化成yyyy-MM-dd 輸出string fmtstr = now.fmtDatayyyymmdd();//2.0 將now格式化成yyyy-MM-dd HH:mm:ss 輸出string fmtstr1 = now.fmtDatayyyymmddhhmmss();

3.0擴展方法的特點

1、擴展方法優先級要低于實例方法 

 

    public static class ExtHelper    {        public static string ToUpper(this string str)        {            return str.ToUpper();        }    }

 

  我們都知道在string上面有一個ToUpper方法,如果此時我們在定義一個同樣的擴展方法,這個方法將不起作用...

2、擴展方法可以與實例方法構成方法的重載

 

 public static class ExtHelper    {        public static string ToUpper(this string str, int num)        {            return str.ToUpper() + num;        }    }

 

  此時,如果我們有自己的業務邏輯,那么我們可以和實例方法構成重載...

3、定義在父類上面的擴展方法,在子類對象上可以使用

 public interface ipig { }    public class Pig : IPig    {        PRivate string _name;        public string Name        {            get            {                return _name;            }            set            {                if (value.Length >= 2)                {                    _name = value;                }                else                {                    //拋出異常                }            }        }        //自動屬性        public int Age        {            get;            set;        }    }    public class smallPig : Pig { }
 public static class ExtHelper    {        public static string Get(this Pig pig)        {            return pig.Name;        }    }

  子類也可以點出擴展方法

var pig = new Pig(); pig.Get(); var spig = new smallPig(); spig.Get();

 

4、定義在接口上面的擴展方法,在實現類對象上可以使用 (EF,MVC使用很頻繁)

 public static class ExtHelper    {        public static void Set(this IPig ipig)        {                }    }

  接口實現類也可以點出擴張方法。在MVC中的擴展在IQueryable<T>中的擴展方法,在Dbset<T>中使用

            var pig = new Pig();            pig.Get();            pig.Set();            var spig = new smallPig();            spig.Get();            spig.Set();

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汤原县| 绥芬河市| 丹棱县| 江安县| 游戏| 泽普县| 时尚| 米林县| 永年县| 台前县| 上饶县| 堆龙德庆县| 达拉特旗| 平乐县| 岱山县| 姜堰市| 井研县| 义马市| 江达县| 新乡县| 云霄县| 瓦房店市| 九寨沟县| 英山县| 德安县| 麻江县| 石家庄市| 封开县| 布拖县| 天台县| 许昌县| 江华| 保靖县| 贵州省| 崇左市| 霍林郭勒市| 连南| 汉川市| 蒲江县| 郸城县| 郯城县|