●擴展方法

    擴展方法使你可以向現有類型「添加」方法,而無需建立新的派生類型、從新編譯或以其餘方式修改原始類型。 擴展方法是一種特殊的靜態方法,但能夠像擴展類型上的實例方法同樣進行調用。這是msdn官網對擴展方法的描述。函數

 

舉個例子:this

    static void Main(string[] args)
    {
        DateTime now = DateTime.Now;
        string time = now.ToString("yyyy-MM-dd HH:mm:ss");
        Console.WriteLine(time);
    }

      假設需求變了,日期格式要改爲」yyyy-MM-dd」,固然只須要初始化time時按下面的寫法改就能夠:spa

        string time = now.ToString("yyyy-MM-dd");

    可是若是要改變的日期格式有多個類呢,每一個都改一次麼?這樣一旦需求變來變去,就忙死人了。傳統的方法是封裝一個幫助類,在裏面寫方法,而後其餘類調用。code

    public class DateHelper
    {
        public static string DateToString(DateTime dt)
        {
            return dt.ToString("yyyy-MM-dd HH:mm:ss");
        }
    }

    這樣要調用另外一個類的方法,仍是有點麻煩,有沒有什麼方法可以讓咱們像now.ToString()同樣直接調用呢?微軟寫好的,咱們改不了,因而便引出了擴展方法。blog

 

咱們把DateHelper類改爲靜態類,同時改寫DateToStrin()方法string

    public static class DateHelper
    {
        public static string DateToString(this DateTime dt)
        {
            return dt.ToString("yyyy-MM-dd HH:mm:ss");
        }
    }

    此時回到主函數,輸入「now.」就能夠看見自動提示有個DateToString()方法,因而代碼能夠這樣寫:it

    static void Main(string[] args)
    {
        DateTime now = DateTime.Now;
        string time = now.DateToString();
        Console.WriteLine(time);
    }

 

 

多個參數:編譯

    public static class DateHelper
    {
        /// <summary>
        /// 此時間是否在此範圍內 -1:小於開始時間 0:在開始與結束時間範圍內 1:已超出結束時間
        /// </summary>
        /// <param name="t"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static int IsRange(this DateTime t, DateTime startTime, DateTime endTime)
        {
            if (((startTime - t).TotalSeconds > 0))
            {
                return -1;
            }

            if (((endTime - t).TotalSeconds < 0))
            {
                return 1;
            }

            return 0;
        }
    }

能夠這樣調用:time.IsRange(t1,t2); //判斷時間time是否在t1到t2的範圍內class

 

使用擴展方法須要注意:擴展

一、此方法必須是一個靜態方法,同時必須放在靜態類中;

二、擴展方法不能和調用的方法放在同一個類中;

三、第一個參數必需要,而且必須是this,這是拓展方法的標識。若是方法裏面還要傳入其餘參數,能夠在後面追加參數;

相關文章
相關標籤/搜索