2010年7月8日 星期四

C# Extension Methods

Extension Methods 顧名思義就是擴展方法,據說這是在 C# 3.0 出現的東西,
在以前沒有這東西的時代裡,我們如果想要檢查一個陣列(array)是否有值,
或者是否為 null 的時候,可能是寫個 method 去檢查,或是直接來。類似這樣:
// method 檢查
bool IsNullOrEmpty(string[] instance)
{
    return (instance == null) || (instance.Length == 0);
}
// 直接來
string[] array;
bool result = (array == null) || (array.Length == 0);
換成 Extension Methods 該怎麼寫呢?就像下面這樣:
namespace Frank.Extensions
{
    public static class ArrayExt
    {
        public static bool IsNullOrEmpty<T>(this T[] instance)
        {
            return (instance == null) || (instance.Length == 0);
        }
    }
}
關鍵字是 "this" 意思有點像是把自己當參數傳進來的那種感覺,
上面同時也用了泛型,因此只要 using Frank.Extensions;

各型別的陣列都可以用 IsNullOrEmpty() 這方法囉!
這樣在使用上就變得更簡單了,同時也更容易閱讀了吧。
比較一下用 Extension Methods 和完全不用的樣子看看:
string[] array;
// 使用 Extension Methods
if (array.IsNullOrEmpty())
{
    // do some thing
}
// 直接來
if ((array == null) || (array.Length == 0))
{
    // do some thing
}
是不是更容易閱讀了呢?


沒有留言: