Effective C# (Covers C# 6.0), (includes Content Update Program): 50 Specific Ways to Improve Your C#, 3rd Edition By Bill Wagner 讀後心得
在介面設計上可利用擴充方法擴充原有介面,利用擴充方法擴充介面有幾個好處:
1. 無需修改原有介面,維持介面簡單。
2. 擴充方法設計可彈性運用,讓方法更明確表達自身意義。
2. 擴充方法設計可彈性運用,讓方法更明確表達自身意義。
範例一:
public static class Comparable
{
public static bool greaterThan<T>( this T left, T right )
where T : IComparable<T> =>
left.CompareTo( right ) > 0;
public static bool greaterThanEqual<T>( this T left, T right )
where T : IComparable<T> =>
left.CompareTo( right ) >= 0;
public static bool lessThan<T>( this T left, T right )
where T : IComparable<T> =>
left.CompareTo( right ) < 0;
public static bool lessThanEqual<T>( this T left, T right )
where T : IComparable<T> =>
left.CompareTo( right ) <= 0;
}
在這個例子裡,T 被限制需實作 IComparable<T>。雖然可直接呼叫 CompareTo 比較物件相對大小關係,但其回傳值為 int 較不直覺。利用擴充方法明確命名比較方法並回傳布林值,能讓呼叫端更能了解方法回傳值所代表的意義。
範例二:
public interface IFoo
{
int Maker { get; set; }
}
public class Mytype : IFoo
{
public int Maker { get; set; }
public void nextMaker( ) => Maker += 5;
}
public static class FooExtendsions
{
public static void nextMaker( this IFoo thing ) =>
thing.Maker += 1;
}
實作擴充方法時,需注意類別內部定義的方法與擴充方法是否有衝突。在此例中,nextMaker 有兩個呼叫版本,應維持同樣名稱的方法回傳相同結果,避免誤會。
結論:
1. 定義最小化介面,其餘利用擴充方法設計。
2. 利用擴充方法無需破壞原本介面設計,降低不相容風險。
1. 定義最小化介面,其餘利用擴充方法設計。
2. 利用擴充方法無需破壞原本介面設計,降低不相容風險。