C#在3.0後增加了擴充方法(Extension Method)的功能,這使你可以很輕鬆的為已有類型添加方法而不用修改原類型!
擴充方法的實現也非常簡單,實質就是一個靜態類,裡面添加了一些靜態方法。唯一與通常所說的靜態類的區別在於其中的靜態方法的第一個參數,要求在第一個參數的類型前加入this關鍵字,下面是一個比較兩個對象是否相等的例子:
namespace HYH.ExtensionMethod{ public static class ObjectEquals { public static bool IsEqualsTo(this object self, object obj) { PropertyInfo[] selfInfos = self.GetType().GetProperties(); PropertyInfo[] objInfos = obj.GetType().GetProperties(); if (selfInfos.Length <= 0) return false; if (selfInfos.Length != objInfos.Length) return false; for (int i = 0; i < selfInfos.Length; i++) { try { object value1 = selfInfos[i].GetValue(self, null); object value2 = objInfos[i].GetValue(obj, null); if (value1.GetType().IsValueType) { if (!value1.Equals(value2)) { return false; } } } catch { } } return true; } }}
這樣,在HYH.ExtensionMethod的可見地區,所有的object對象都具有了bool IsEqualsTo(object obj)方法,在IDE中直接在一個對象的後面輸入‘.’,IDE就能自動聯想出IsEqualsTo(object obj)方法,是不是很厲害?