例子
直接看例子
有這樣一個接口:
然后有三個它的實現類:
然后在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()方法了:
運行程序:
