我需要爲現有接口上的函數創建重載,而不會影響當前實現或使用該接口(理想情況下)的任何組件。向接口添加新功能
我想我有幾個選擇:
簡體 原始界面:
public interface IServerComponent
{
bool Add(int a, int b);
}
我可以添加新的重載函數的接口,並迫使每一個實現接口的類實施新功能。
public interface IServerComponent
{
bool Add(int a, int b);
bool Add(int a, int b, int c);
}
或者我可以創建一個實現原始接口的新接口。然後,其他類,利用原有的不需要改變任何新的類可以實現新的界面...
public interface IServerComponent2 : IServerComponent
{
bool Add(int a, int b, int c);
}
什麼是最好的做法是這樣的情況嗎?還有其他選擇嗎?
感謝
+1提的擴展方法 – ram 2010-07-15 13:51:08
擴展方法將工作,但也會有分散到其他班級的凝聚力降低實現類的功能的效果。我認爲這是最好的臨時解決方案。在無法擴展類的情況下,因爲您無法訪問源,所以擴展方法是有意義的。我可能以這種方式對現有代碼庫進行微小更新,但我肯定會將其放在下一個主要版本的重構列表中。 – tvanfosson 2010-07-15 13:58:51
這完全取決於設計。如果您添加*新功能*,那麼我會同意;它屬於一個接口。如果你添加*超載*(例如,幾乎相同的功能,總是表達其他功能),然後我不同意。在這種情況下,擴展方法允許*正交性,減少代碼重複。 [Joe Duffy](http://www.bluebytesoftware.com/blog/2010/02/10/ExtensionMethodsAsDefaultInterfaceMethodImplementations.aspx)在這個主題上有一篇很好的博客文章。 – 2010-07-15 14:10:30