介面Interface
Interface只定義Interface
規格,方法成員內容則由繼承介面的衍生Class依需求提供實作,而介面最大好處是將方法成員的
規格與實作分開。
介面範例
以學校為例,學校會有加退選課系統,那讓我們就可以使用Interface來定相關加選課與退選課的規格,我們新增一個介面IElective.vb檔:
1 | Public Interface IElective |
3 | Function enrollment( ByVal name As String , ByVal id As String ) As Boolean |
5 | Function withdrawal( ByVal name As String , ByVal id As String ) As Boolean |
介面實作
由於Interface必須由繼承的衍生Class實作所有方法,因此Interface
一律為Public修飾詞,所以
不需要修飾詞,而Interface命名習慣以大寫
"I"為開頭。函式(Sub或Function)只需定義
名稱及參數即可,實作的衍生Class必須實作
所有方法成員,即使沒有實作相關內容,還是必須在實作的衍生Class裡
保留定義Interface方法。
Interface IElective → 由StudentClass.vb類別檔及AcademicAffairs.vb類別檔繼承,學生需要加退選課的功能,但學務處只需要學生加選課相關功能。此時AcademicAffairs.vb未實作退選課功能,但還是必須保留相關定義。實作Interface必須使用
Implements關鍵字,當你輸入完Implements IElective後,Visual Studio會自動帶出所有Interface方法成員。注意方法的最後面會自加上Implements IElective.enrollment等關鍵字,代表此方法為實作Interface。
StudentClass.vb
01 | Public Class StudentClass |
04 | Public Function enrollment( ByVal name As String , ByVal id As String ) As Boolean Implements IElective.enrollment |
08 | Public Function withdrawal( ByVal name As String , ByVal id As String ) As Boolean Implements IElective.withdrawal |
AcademicAffairs.vb
退選課功能未實作之功能,但必頁保留Interface定義。
01 | Public Class AcademicAffairs |
04 | Public Function enrollment( ByVal name As String , ByVal id As String ) As Boolean Implements IElective.enrollment |
08 | Public Function withdrawal( ByVal name As String , ByVal id As String ) As Boolean Implements IElective.withdrawal |
介面繼承
假設我們還有一個成績Interface:IStudentResults.vb介面檔,成績的計算必須依賴選課,所以Interface IElective被Interface IStudentResultsb繼承,Interface IStudentResults被Class AcademicAffairs繼承,而AcademicAffairs.vb類別檔必須實作所有Interface的方法成員(IElective及IStudentResults)。
IStudentResults.vb:
1 | Public Interface IStudentResults |
4 | Function Results( ByVal name As String , ByVal numeric As Double ) As Double |
AcademicAffairs.vb(須實作IStudentResults)。注意函數最後面會有Implements IElective.enrollment及Implements IStudentResults.Results等字,讓我們可以清楚看出來是實作那一個Interface的方法成員。
AcademicAffairs.vb
01 | Public Class AcademicAffairs |
02 | Implements IStudentResults |
04 | Public Function enrollment( ByVal name As String , ByVal id As String ) As Boolean Implements IElective.enrollment |
08 | Public Function withdrawal( ByVal name As String , ByVal id As String ) As Boolean Implements IElective.withdrawal |
12 | Public Function Results( ByVal name As String , ByVal numeric As Double ) As Double Implements IStudentResults.Results |
多重介面
在.Net Framework不充許多重Class繼承,但卻可以
多重Interface繼承來同時實作多個介面。實作多重Interface繼承只在逐一加入Implements InterfaceName即可。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。