C# 中的介面是如何工作的?
介面定義了一個將由類或結構實現的契約。它可以包含方法、屬性、事件和索引器。介面類似於類,但它不包含任何資料,只指定其可以執行的行為(更準確地說,實現它的類可以執行的行為)。
一個類可以實現一個或多個介面。要實現介面成員,類應該具有與介面成員相同的方法定義的公共成員,即相同名稱和簽名。
例如,`IComparer` 是在 `System.Collections` 名稱空間中定義的介面,它定義了比較兩個物件的方法的契約。`Car` 類實現了 `IComparer` 介面。
public interface IDriver{ void Drive(); } public class Car : IDriver{ public string Name { get; set; } public int Speed { get; set; } public void Drive(){ Console.WriteLine($"{Name}: {Speed}"); } }
介面上的所有成員都是隱式抽象的,並且沒有任何實現細節。所有介面成員都是公共的。不能對介面成員使用訪問修飾符。實現介面的類必須提供實現介面的公共方法。
介面可以擴充套件其他介面,例如:
public interface IPerformer { void Perform(); } public interface ISinger : IPerformer{ void Sing(); }
介面允許您在一個類中包含來自多個源的行為。由於 C# 不像 C++那樣允許多重繼承,介面是 C# 中實現多重繼承的一種方式。
介面的一個缺點是,當您使用它們公開 API 時,它們不如類靈活。當您更改介面的契約時,實現該介面的所有類都會中斷,需要更新以實現該介面。
示例
using System; class Program{ static void Main(){ var carOne = new Car { Name = "Honda", Speed = 100 }; var carTwo = new Car { Name = "Toyota", Speed = 70 }; carOne.Drive(); carTwo.Drive(); } } public interface IDriver{ void Drive(); } public class Car : IDriver{ public string Name { get; set; } public int Speed { get; set; } public void Drive(){ Console.WriteLine($"{Name}: {Speed}"); } }
輸出
Honda: 100 Toyota: 70
廣告