C#擷取IP地址介面編程

來源:互聯網
上載者:User

通過對IP地址擷取的瞭解,由於對業務不甚瞭解,我採用介面編程來實現getIP():

介面好比一種模版,這種模版定義了對象必須實現的方法,其目的就是讓這些方法可以作為介面執行個體被引用。介面不能被執行個體化。類可以實現多個介面並且通過這些實現的介面被索引。介面變數只能索引實現該介面的類的執行個體。

說明:
  1、C#中的介面是獨立於類來定義的。這與 C++模型是對立的,在 C++中介面實際上就是抽象基類。
  2、介面和類都可以繼承多個介面。
  3、而類可以繼承一個基類,介面根本不能繼承類。這種模型避免了 C++的多繼承問題,C++中不同基類中的實現可能出現衝突。因此也不再需要諸如虛擬繼承和顯式範圍這類複雜機制。C#的簡化介面模型有助於加快應用程式的開發。
  4、一個介面定義一個只有抽象成員的參考型別。C#中一個介面實際所做的,僅僅只存在著方法標誌,但根本就沒有執行代碼。這就暗示了不能執行個體化一個介面,只能執行個體化一個派生自該介面的對象。
  5、介面可以定義方法、屬性和索引。所以,對比一個類,介面的特殊性是:當定義一個類時,可以派生自多重介面,而你只能可以從僅有的一個類派生。

(一)定義介面:
     從技術上講,介面是一組包含了函數型方法的資料結構。通過這組資料結構,客戶代碼可以調用組件對象的功能。
     定義介面的一般形式為:
[attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]
  說明:
  1、attributes(可選):附加的定義性資訊。
  2、modifiers(可選): 允許使用的修飾符有 new 和四個存取修飾詞。分別是:new、public、protected、internal、 private。在一個介面定義中同一修飾符不允許出現多次,new 修飾符只能出現在嵌套介面中,表示覆蓋了繼承而來的同名成員。The public, protected, internal, and private 修飾符定義了對介面的存取權限。
  3、指標和事件。
  4、identifier:介面名稱。
  5、base-list(可選):包含一個或多個顯式基底介面的列表,介面間由逗號分隔。
  6、interface-body:對介面成員的定義。

(二)提供者:
     對介面方法的調用和採用索引指標訪問的規則與類中的情況也是相同的。如果底層成員的命名與繼承而來的高層成員一致,那麼底層成員將覆蓋同名的高層成員。但由於介面支援多繼承,在多繼承中,如果兩個父介面含有同名的成員,這就產生了二義性(這也正是C#中取消了類的多繼承機制的原因之一),這時需要進行顯式的定義。
     在C#中,介面內的所有方法預設都是公用方法。
     介面可由類實現。實現的介面的標識符出現在類的基列表中。
     類的基列表同時包含基類和介面時,列表中首先出現的是基類。

(三)實現介面:
     1、顯式實現介面成員
  為了實現介面,類可以定義顯式介面成員執行體(Explicit interface member implementations)。顯式介面成員執行體可以是一個方法、一個屬性、一個事件或者是一個索引指標的定義,定義與該成員對應的全權名應保持一致。
     2、繼承介面實現
  介面具有不變性,但這並不意味著介面不再發展。類似於類的繼承性,介面也可以繼承和發展。
  注意:介面繼承和類繼承不同,首先,類繼承不僅是說明繼承,而且也是實現繼承;而介面繼承只是說明繼承。也就是說,衍生類別可以繼承基類的方法實現,而派生的介面只繼承了父介面的成員方法說明,而沒有繼承父介面的實現,其次,C#中類繼承只允許單繼承,但是介面繼承允許多繼承,一個子介面可以有多個父介面。
  介面可以從零或多個介面中繼承。從多個介面中繼承時,用":"後跟被繼承的介面名字,多個介面名之間用","分割。被繼承的介面應該是可以訪問得到的,比如從private 類型或internal 類型的介面中繼承就是不允許的。介面不允許直接或間接地從自身繼承。和類的繼承相似,介面的繼承也形成介面之間的階層。
    3、重新實現介面
  我們已經介紹過,衍生類別可以對基類中已經定義的成員方法進行重載。類似的概念引入到類對介面的實現中來,叫做介面的重實現(re-implementation)。繼承了介面實現的類可以對介面進行重實現。這個介面要求是在類定義的基類列表中出現過的。對介面的重實現也必須嚴格地遵守首次實現介面的規則,派生的介面映射不會對為介面的重實現所建立的介面映射產生任何影響。
    4、映射介面
  類必須為在基類表中列出的所有介面的成員提供具體的實現。在類中定位介面成員的實現稱之為介面映射(interface mapping )。
  映射,數學上表示一一對應的函數關係。介面映射的含義也是一樣,介面通過類來實現,那麼對於在介面中定義的每一個成員,都應該對應著類的一個成員來為它提供具體的實現。
  類的成員及其所映射的介面成員之間必須滿足下列條件:
  1、如果A和B都是成員方法,那麼A和B的名稱、類型、形參表(包括參數個數和每一個參數的類型)都應該是一致的。
  2、如果A和B都是屬性,那麼A和B的名稱、類型應當一致,而且A和B的訪問器也是類似的。但如果A不是顯式介面成員執行體,A允許增加自己的訪問器。
  3、如果A和B都是時間那麼A和B的名稱、類型應當一致。
  4、如果A和B都是索引指標,那麼A和B的類型、形參表(包括參數個數和每一個參數的類型)應當一致。而且A和B的訪問器也是類似的。但如果A不是顯式介面成員執行體,A允許增加自己的訪問器。
  那麼,對於一個介面成員,怎樣確定由哪一個類的成員來實現呢。即一個介面成員映射的是哪一個類的成員。在這裡,我們敘述一下介面映射的過程。假設類C實現了一個介面IInterface,Member是介面IInterface中的一個成員,在定位由誰來實現介面成員Member,即Member的映射過程是這樣的:
  1、如果C中存在著一個顯式介面成員執行體,該執行體與介面IInterface 及其成員Member相對應,則由它來實現Member 成員。
  2、如果條件(1)不滿足,且C中存在著一個非靜態公有成員,該成員與介面成員Member相對應,則由它來實現Member 成員。
  3、如果上述條件仍不滿足,則在類C定義的基類列表中尋找一個C 的基類D,用D來代替C。
  4、重複步驟1-- 3 ,遍曆C的所有直接基類和非直接基類,直到找到一個滿足條件的類的成員。
  5、如果仍然沒有找到,則報告錯誤。
在進行介面映射時,還要注意下面兩點:
  1、在決定由類中的哪個成員來實現介面成員時,類中顯式說明的介面成員比其它成員優先實現。
  2、使用Private、protected和static修飾符的成員不能參與實現介面映射。

 

參考網站:http://blog.csdn.net/lyf1840/archive/2005/01/22/263467.aspx 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.