標籤:name 支援 eric cti 介面 介面與抽象類別 函數 linq gen
C#基礎入門 七介面
- 由於C#語言不支援多重繼承,所以可以使用介面類比結構的繼承,通過使用interface關鍵字,定義一個介面。
interface USB{ void Read(string[] datas);}
- 介面與抽象類別非常類似,它定義了一些未實現的屬性和方法,所有繼承它的類都繼承這些成員,在這個角度上,可以把介面理解為一個類的模板,介面最終的目的是起到統一的作用。
- 實現介面的任何類或結構必須實現其所有成員的方法;
- 介面不能直接執行個體化,但是可以通過指向子類間接執行個體化;
- 介面可以包含方法和屬性的聲明,但不能包含欄位;
- 介面中所有方法、屬性預設為public,不能在後面再添加修飾符;
- 類或結構可以實現多個介面,類可以繼承基類並實現一個或多個介面。
- 抽象類別除擁有抽象成員之外,還可以擁有非抽象成員;而介面所有的成員都是抽象的
- 抽象成員可以是私人的,而介面成員預設是公有的
- 介面中不能含有建構函式、解構函式、靜態成員和常量
- C#只支援單繼承,即子類只能繼承一個父類,而一個子類卻能接受實現多個介面。
練習
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace BallCalculation{ interface IArea { void Area();//計算球面積的方法 } interface IVolume { void Volume(); } public class BallCalculation : IArea, IVolume { public void Area() { Console.WriteLine("請輸進球的半徑"); int r = Convert.ToInt16(Console.ReadLine()); double ar = 4 * Math.PI * r * r; Console.WriteLine("球表面積為{0}",ar); } public void Volume() { Console.WriteLine("請輸進球的半徑"); int r = Convert.ToInt16(Console.ReadLine()); double vol = Math.PI * r * r * r * 4 / 3; Console.WriteLine("球體積為{0}", vol); } } class Program { static void Main(string[] args) { BallCalculation ballcal = new BallCalculation(); IArea iar = (IArea)ballcal; IVolume ivol = (IVolume)ballcal; iar.Area(); ivol.Volume(); } }}
C#基礎入門 七