標籤:
interface IPrint {
void Print();
}
class A : IPrint {
public void Print() {
System.Console.WriteLine("A");
}
}
class B : IPrint {
public void Print() {
System.Console.WriteLine("B");
}
}
class AppMain {
public static void Print(IPrint obj) {
obj.Print();
}
public static void Main() {
Print(new A()); // display A
Print(new B()); // display B
}
}
在這個例子中,IPrint 介面中定義了Print方法,但沒有實現方法體.
類A和類B都繼承了IPrint介面,並且實現了不同的Print方法.
在AppMain 中調用A\B,獲得不同的列印結果
=============================================
這是一個規範和思維習慣問題。介面是程式對功能不同,但使用方法相同的類的概括和定義,如果你的很多類要繼承同一個介面,但又經常都不需要實現所有這個介面的所有方法或者屬性,那就是你的介面設計的有問題。舉個例子:
比如, "手動檔轎車" 這個介面,它需要有以下幾個方法就能開走:方向盤、油門、刹車、排檔、離合器 。 平治,寶馬,蘭博基尼,法拉利,奧迪,悍馬 這幾個具體的車型相當於"類",它們都繼承"手動檔轎車",我會開手動檔轎車,那麼這些實現 "手動檔轎車" 介面的隨便一輛車拿給我,我都能開走。 但是你造了那麼一輛車,它沒有刹車、沒有排檔、沒有離合器,然後告訴我這是一輛"手動檔轎車"(繼承"手動檔轎車" 介面) , 我拿去,是能開走,但是一旦想停車、換檔,才發現沒有這幾個裝置(方法,屬性),後果是什嗎? 沒人規定你造的這個車不能叫"手動檔轎車",但很顯然別人要用開手動檔轎車的方法來開你這個車,十有八九會出事故。所以,編譯器規定你繼承了一個介面,你就必須實現它的所有成員,就像規定你造"手動檔轎車",必須把方向盤、油門、刹車、排檔、離合器全部裝全才行。
C# 介面