使用委派取代介面的時機 (C# 程式設計手冊)
委派和介面都可以讓類別設計人員分隔型別宣告與實作 (Implementation)。 指定的介面可以由任何類別或結構來繼承和實作。 只要方法符合委派的方法簽章,即可針對任何類別的方法來建立委派。 即使不知道實作介面或委派方法的類別,物件仍然可以使用介面參考或委派。 既然有這些相似之處,那麼類別設計人員應該在何時使用委派?又應該在何時使用介面呢?
請在下列狀況使用委派:
使用事件設計模式時
需要封裝靜態方法時
呼叫端不需要存取將實作方法之物件的其他屬性、方法或介面。
想要易於撰寫時
類別可能需要方法的多個實作時
請在下列狀況使用介面:
存在有可能被呼叫的相關方法群組時。
類別只需要方法的一個實作
使用介面的類別可能有需要將介面轉型成另一介面或類別型別
要實作的方法會連結至類別的型別或類別本身,例如比較方法
使用單一方法介面而不使用委派的一個最佳範例是 IComparable,或是泛型版本的 IComparable<T>。 IComparable 會宣告 CompareTo 方法,該方法所傳回的整數會指定兩個相同型別物件之間的關聯性為小於、等於或大於。 IComparable 可以用來做為排序演算法的基準。 雖然此時也可以使用委派比較方法來做為排序演算法的基準,但這種方法並不理想。 因為比較作業屬於該類別的功能,而比較演算法並不會在執行階段時有所變更,所以單一方法介面會較為理想。