2017年10月1日 星期日

C# : 使用擴充方法 Extension Method,增加 DateTime 功能

在這個練習中,我們將會要來練習擴充方法 Extension Method 的使用方式,根據微軟官方的說明:擴充方法可讓您在現有類型中「加入」方法,而不需要建立新的衍生類型、重新編譯,或是修改原始類型

了解更多關於 [擴充方法
了解更多關於 [C# 程式設計手冊 


在這裡,我們將會要使用結構 DateTime 型別,進行擴充它原有的功能;我們在實際開發專案的時候,往往需要使用到很多的日期相關的方法,取得需要的特定日期,例如,想要取得下個星期日的日期是哪一天,可是,在原有的 DateTime 結構中,卻沒有提供這樣的功能,因此,很多時候,我們需要寫出一些支援方法,幫助我們進行這樣的日期計算;最後,透過呼叫這些支援方法,得到所需要的日期。
不過,透過擴充方法的使用,讓我們可以更容易地在 DateTime 物件上,直接使用這些擴充方法,得到我們的日期。
首先,我們需要宣告一個靜態類別,在這個靜態類別內,我們再進行更多的靜態方法的定義;在這些靜態方法中,他的第一個參數將會是需要加入 this 關鍵字與要套用的型別,例如:public static DateTime Next(this DateTime from, DayOfWeek dayOfWeek);若要使用這個擴充方法,我們僅需要 DateTime 物件之後,輸入 .,Visual Studio 的 Intellience 就會顯示出我們剛剛定義的擴充方法(此時,需要加入適當的命名空間宣告),例如: Now.Next(DayOfWeek.Sunday)
    public static class MyDateTimeExtension
    {
        public static DateTime Next(this DateTime from, DayOfWeek dayOfWeek)
        {
            int start = (int)from.DayOfWeek;
            int target = (int)dayOfWeek;
            if (target <= start)
                target += 7;
            return from.AddDays(target - start);
        }
    }
這是我們測試的程式碼
            var Now = DateTime.Now;
            Console.WriteLine($"下個星期日為 {Now.Next(DayOfWeek.Sunday)}");
            Console.WriteLine($"Press any key for continuing...{Environment.NewLine}");
            Console.ReadKey();

執行結果為
下個星期日為 2017/10/1 下午 06:05:22
Press any key for continuing...

了解更多關於 [擴充方法
了解更多關於 [C# 程式設計手冊 




沒有留言:

張貼留言