C#接口有三種用途:html
提供方法、屬性、事件的抽象。這是接口最多見的用途。在面向對象的設計中,接口是軟件架構可擴展性的重要保證因素,與抽象類配合使用,使得框架結構具備「被注入」的特性,從而提升系統的擴展性架構
用做泛型約束。在這種狀況下,接口能夠僅僅是一個類型,其中能夠不帶任何方法、屬性或事件的定義。請看:框架
在這個例子中,IChargeable僅僅是爲了提供一個泛型約束,確保ChargeFacility中的泛型類型是實現了IChargeable接口的(或者是IChargeable接口自己)。在這種狀況下,IChargeable徹底能夠不須要提供任何方法、屬性或事件的定義。ide
public interface IChargeable 函數
{ post
} url
public class MyCharge : IChargeable { } spa
public class ChargeFacility<TChargeable> 設計
where TChargeable : IChargeable { } orm
接口用做開發約束。因爲反射的引入,在某些應用場合,程序自己極可能不是經過判斷某個類是否實現了某個接口,再去調用給定的函數;程序徹底能夠使用反射來找到它所須要調用的函數而後使用MethodInfo.Invoke方法去調用這個函數。那麼這樣一來,開發人員有可能忘記在類中實現這些特定的方法,而致使程序出現問題。因而能夠添加一個接口,在其中定義好必須實現的函數聲明,而後經過Best Practice的方式要求開發人員在這些類上實現這個接口,那麼開發人員也就不得不去填寫函數實現體了。