使用委派取代介面的時機 (C# 程式設計手冊)

委派和介面都可以讓類別設計人員分隔型別宣告與實作 (Implementation)。 指定的介面可以由任何類別結構來繼承和實作。 只要方法符合委派的方法簽章,即可針對任何類別的方法來建立委派。 即使不知道實作介面或委派方法的類別,物件仍然可以使用介面參考或委派。 既然有這些相似之處,那麼類別設計人員應該在何時使用委派?又應該在何時使用介面呢?

請在下列狀況使用委派:

  • 使用事件設計模式時

  • 需要封裝靜態方法時

  • 呼叫端不需要存取將實作方法之物件的其他屬性、方法或介面。

  • 想要易於撰寫時

  • 類別可能需要方法的多個實作時

請在下列狀況使用介面:

  • 存在有可能被呼叫的相關方法群組時。

  • 類別只需要方法的一個實作

  • 使用介面的類別可能有需要將介面轉型成另一介面或類別型別

  • 要實作的方法會連結至類別的型別或類別本身,例如比較方法

使用單一方法介面而不使用委派的一個最佳範例是 IComparable,或是泛型版本的 IComparable<T>IComparable 會宣告 CompareTo 方法,該方法所傳回的整數會指定兩個相同型別物件之間的關聯性為小於、等於或大於。 IComparable 可以用來做為排序演算法的基準。 雖然此時也可以使用委派比較方法來做為排序演算法的基準,但這種方法並不理想。 因為比較作業屬於該類別的功能,而比較演算法並不會在執行階段時有所變更,所以單一方法介面會較為理想。

請參閱

參考

事件 (C# 程式設計手冊)

方法 (C# 程式設計手冊)

介面 (C# 程式設計手冊)

概念

C# 程式設計手冊