在這裡,我們將會要使用結構 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();
擴充方法可讓您在現有類型中「加入」方法,而不需要建立新的衍生類型、重新編譯,或是修改原始類型