本隨筆,之所以叫隨筆而不叫文章。就是說本文只是個人對技術的粗淺理解,不當、抑或錯誤之處在所難免。如遇高人指點一二,自當不勝感激。
1、MSDN上有如下定義:
接口描述的是可屬於任何aspx">類或結構的一組相關功能。
那麼何為一組相關功能,其實就是一種共同的行為。那麼為什麼要把這種共同的行為,抽象到一個接口中呢?
這就要從下面說起了:
中國有句古話叫做“沒有規矩不成方圓”,經過千年的傳承,證明這句話還是很有道理的。車同軌,書同文,行同倫。經濟才能發展,社會才會進步,這就充分說明了規范和約束存在的重要性。現實生活中的例子也比比皆是,比如家裡的電源插座,就只有兩種接口,試想一下,如果不同的電器產品都有自己的電源插座的標准,而不遵守這種約束,那將會成什麼樣子?在比如我們常用數碼產品的數據線,我總是在想要是所有的都能用一條該多好啊!廢話說了一堆,我無非是想說規范和約束,在特定的情況下是有好處的。這也就是為什麼要把這種共同的行為,抽象到一個接口的原因之一。
關於多態,大家可以參看MSDN,至於能不能理解,能理解到什麼程度,全在個人修行,通過接口可以實現這種多態的行為。
關於接口如何使用,語法層面上的東西我不想多說,園子裡已經有很多文章,大家可以參考。在這裡我想通過顯式接口以及訪問修飾符的層面上來談談我對接口的理解。
大家都知道接口中定義的成員是沒有訪問修飾符的。例如:如果你要在 void doWork()前面加上訪問修飾符,編譯將不會通過。
1: interface IControl
2: {
3: void doWork();
4: }
但是為什麼要這麼設計呢?這時候有人就說了,你這不是廢話麼!接口就沒有必要用訪問修飾符,接口就是讓人來實現的,接口中的成員如果設置成除了public以外的修飾符,就沒有意義了。所以在設計C#的時候,微軟就把接口設計成不需要使用訪問修飾符。但底層卻全部是使用的public,這一點我們可以沖IL代碼中看出,如下圖:
所以在某個類實現該接口的時候,doWork()方法也必須是public的,如果不是同樣編譯不過。
1: class Worker : IControl