標籤:
原文http://www.codeproject.com/Articles/1000374/Explicit-Interface-VS-Implicit-Interface-in-Csharp
(Aty表示本人) 介紹什麼是顯式和隱式介面什麼時候需要顯式介面更簡潔的方法(ISP:介面隔離原則)顯式介面更多結論
介紹 文章將討論下顯式介面,討論它們與隱式介面的區別,以及為什麼應該避免使用。
什麼是顯式和隱式介面 C#中有兩種方式來實現介面:顯式和隱式 定義如下介面: 當我們隱式的實現該介面時,代碼如下: 絕大多數開發人員實現介面都使用隱式實現。當我們要顯式實現介面時,Send方法和Recevie方法將被定義成私人的,代碼如下: 簡單地來講,隱式實現的方法是公開的(public),而顯式實現的方法是私人的(private)。那問題來了,為什麼會有public和private之分,又是什麼情況下使用這兩種實現方式。
什麼時候需要顯式介面 讓我先事先聲明: 當你的具體類不需要包含這個介面抽象時,可以使用顯式實現。 我可以感覺到有多難理解以上聲明。 我會慢慢地講解,首先我們要理解"抽象"的含義。抽象:從用戶端的角度,只需要顯示必要的方法和屬性。 以WeatherService類為例 如果有兩個層對它進行調用,UI層和資料層。兩個層關注的測重點不一樣。在UI層中只是關心City和Temperature這兩個屬性,而資料層只關心Send和Receive這兩個方法的調用 對於編程的最佳實務,我再聲明一句: 一個好的軟體架構擁有許多抽象類別。 如果使用隱式實現,Send和Receive方法為公開的,則如果在UI層中調用,Send和Receive方法是可見的,但並沒有使用到。一個好的方法則將實現改為顯式實現,則方法為私人的,UI層中看不到這兩個方法。那如何能使用這兩個方法呢?在資料層中,如下調用:
更簡潔的方法(ISP:介面隔離原則) 介面隔離原則:用戶端不應該依賴它不需要的介面;一個類對另一個類的依賴應該建立在最小的介面上。使用多個專門的介面比使用單一的總介面要好。(百度百科)。 一個比較好的實現是再建立一個介面,IWeather介面,如下: 都通過隱式實現,這樣在調用的過程中,UI將變數類型定義為IWeather,資料層定義為IRequest。 (註:其實Aty對這個還是不明白的,定義一個抽象類別更好,介面定義行為,可能作者只是想說明介面隔離這個概念)
顯式介面更多
當一個類實現多個介面時,而介面中又包含同名的方法,則需要使用顯式實現。
顯式介面結論 1.顯式實現應該要避免,推薦使用ISP介面隔離原則 2.在一種情況下可以使用,當你出於某些原因,不能為具體類賦予介面的行為時則使用顯式實現
008.在C#中,顯式介面VS隱式介面