一、什麼是介面? 介面就是一種規範協議,約定好遵守某種規範就可以寫通用的代碼。 定義了一組具有各種功能的方法(只是一種能力,沒有具體實現,就像抽象方法一樣,“光說不做”)。 理解:記憶體該做成什麼樣的:電壓多少,插線多少,這是一種國際規範,是介面。而,記憶體這個東西具體生產出來了,就是實現介面。不管是什 ...
一、什麼是介面?
介面就是一種規範協議,約定好遵守某種規範就可以寫通用的代碼。
定義了一組具有各種功能的方法(只是一種能力,沒有具體實現,就像抽象方法一樣,“光說不做”)。
理解:記憶體該做成什麼樣的:電壓多少,插線多少,這是一種國際規範,是介面。而,記憶體這個東西具體生產出來了,就是實現介面。不管是什麼品牌的電腦,買來記憶體都能用,這是多態。
介面可以包含:方法、屬性、索引器,事件。 其實都是方法。
介面中的所有成員,都不能寫任何訪問修飾符,預設是public。
介面的成員,子類必須實現。
二、介面的作用。
介面可以實現多繼承。
介面解決了不同類型之間的多態問題,比如魚和船不是同一種類型,但是都能在水裡“游泳”,只是方式不同,所以可用介面。(下麵實例最後一步,邏輯上,car不屬於person類,但是仍然可以實現多態)
三、實例。
我想登記每個國家的人,可以使用方法重載,傳入不同類型的參數,實現對應的方法,但是會寫很多。 而且如果要添加一個國家的人,得改代碼,可擴展性差。
class Program { static void Main(string[] args) { Chinese chinese = new Chinese(); DengJi(chinese); American american = new American(); DengJi(american); } public static void DengJi(Chinese chinese) { chinese.Show(); } public static void DengJi(American american) { american.Show(); } } class Chinese { public void Show() { Console.WriteLine("中國人,18歲"); } } class American { public void Show() { Console.WriteLine("美國人,19"); } }
優化一:通過繼承實現多態, 用參數的時候用父類,具體操作看父類中存儲的對象。------ 提取出父類Person,使用虛方法或者抽象方法。因為Person不需要實例化,所以我用抽象類。
class Program { static void Main(string[] args) { Chinese chinese = new Chinese(); DengJi(chinese); American american = new American(); DengJi(american); } public static void DengJi(Person person) { person.Show(); } } public abstract class Person { public abstract void Show(); } class Chinese:Person { public override void Show() { Console.WriteLine("中國人,18歲"); } } class American:Person { public override void Show() { Console.WriteLine("美國人,19"); } }
優化二:如果我要登記一輛車,車繼承了Person類,不符合邏輯,但我又要實現多態,任何東西都能登記。所以我選擇用介面。
class Program { static void Main(string[] args) { Chinese chinese = new Chinese(); DengJi(chinese); Car car = new Car(); car.Show(); } public static void DengJi(IShowInfo person) { person.Show(); } } public interface IShowInfo { void Show(); } public abstract class Person:IShowInfo { public abstract void Show(); } class Chinese:Person { public override void Show() { Console.WriteLine("中國人,18歲"); } } class American:Person { public override void Show() { Console.WriteLine("美國人,19"); } } class Car :IShowInfo { public void Show() { Console.WriteLine("本田,2.0t"); } }
這樣一來,無論什麼東西,只要繼承了介面,都能登記。