2013-05-22 92 views
1

我計劃稍後在我的應用程序中實現log4net,但目前不可能。軟件將遷移到較新的技術,但需要時間。因此我必須使用專有的日誌機制。有沒有繼承的兼容接口

但是,當我實現新的功能,我想準備好爲以後的遷移。所以我希望有一個自己的類來實現ILog接口,這樣我可以稍後切換到log4net而不更改新功能。這個類當前將映射到專有的日誌機制,並且隨後會被廢棄。

我的問題是:由於我沒有在我的項目log4net的組裝但我現在已經不是一個ILog的接口。當我創建自己的ILog接口時,它將具有完全相同的方法和簽名,當我稍後交換時它會兼容嗎?

+4

你是說你並不實際擁有的接口,但你知道它的內容是?在這種情況下,我幾乎可以肯定,當你放置代碼時,你的代碼將與「實際」界面兼容,因爲你實際上正在使用一個精確的副本。 –

+1

是的,這是事實,因爲我已經知道我們將在大約6個月內遷移到log4net,並且這是一個開源庫。所以我想,這使得一個答案;) – ZoolWay

+1

太糟糕了,我張貼作爲評論,我沒有得到任何代表:) –

回答

2

它將不兼容。但是爲實現你的接口的log4net創建一個薄的包裝將是微不足道的。

+0

爲什麼你會針對所有其他意見和答案得出這個結論? – ZoolWay

+0

因爲.NET不支持鴨子打字。如果使用相同的名稱和成員定義自己的接口,則實現與不同程序集類似接口的對象不能轉換爲接口。如果你的接口也有相同的命名空間,編譯器會抱怨不明確的調用。所以你將被迫刪除你的接口版本。因爲它不兼容。 – OpenMinded

1

我會定義自己的記錄器界面,類似於log4net的,但也許更多的專業化。然後我會將該接口作爲專有記錄器來實現。當時間到了log4net,我會寫一個新的實現 - 一個log4net包裝。

1

,如果你因爲它在log4net的大會的定義,而且在同一個命名空間不僅具有相同定義的接口這將是兼容的。當你會來使用log4net的 - 只是刪除這個自己的接口的聲明(和它的實現)