例子
直接看例子
有這樣一個介面:
然后有三個它的實作類:
然后在main方法里面呼叫:
截至目前,程式都可以成功的編譯和運行,
IPerson介面變更
突然,我想對所有的人類添加一個新的特性,例如,添加一個自我介紹的方法,所以我在IPerson里添加了Introduce()這個方法:
現在再次Build一下專案,肯定會失敗的:
因為這個方法在三個實作類里面都沒有實作,
使用默認的實作來更新介面
如果在C# 8.0以前,我們肯定需要把三個實作類都實作一下這個Introduce() 方法,而在C# 8.0里,我們可以在IPerson介面里做一個默認的方法實作:
再次Build之后,您會發現就沒有錯誤了:
而且我們也可以在所有的實作類上正常的呼叫這個方法:
我沒有設定任何屬性,但是結果是沒問題的,
但是,不可以直接在實作類上呼叫該方法,例如這樣寫就會報錯:
這是因為Teacher這個實作類并沒有定義Introduce()這個方法,
在前面的例子的里,我是通過IPerson介面呼叫的這個方法,這是沒有問題的,因為IPerson這個介面定義了這個方法,
介面的靜態成員
上面例子的輸出是這樣的:
而我想讓輸出有默認的名字和年齡,在C# 8.0里面,我們可以這樣做,添加靜態欄位(field)和靜態方法:
實際上這個不會報錯的,出現紅色波浪線的原因可能是因為我的Resharper和VS沒有升級,Build會成功的,
這里面我做的有點“脫褲子放屁”,但我僅僅是為了展示語言的新特性,
然后在呼叫的時候,我們可以在IPerson介面上先設定默認值:
然后運行:
可以看到,由于各個實作類都沒有自己的實作,所以都輸出了默認值,
在類上實作介面方法
在Teacher類上實作Introduce()這個方法:
然后就可以呼叫Teacher上的Introduce()方法了:
運行程式:
可以看到無論是通過Teacher類的實體還是通過IPerson介面,最終呼叫的都是Teacher類實作的Introduce()方法,
更詳細的檔案請點擊這里查看,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/112640.html
標籤:C#
