來源:
這篇真的寫得很棒,大家一定要點進去看看,並自己動手寫Code !!
而我自己寫一篇只是為了建檔,方便日後自己觀看用,裡面的Code都是基於上面教學文寫的,自己只是加了一個AutoDoor的功能而已。
- 建立一個abstract的Door類別,裡面有Open(開門)與Close(關門)這兩個虛擬方法可以用
abstract class Door { public virtual void Open() { Console.WriteLine("Open Door"); } public virtual void Close() { Console.WriteLine("Close Door"); } }
- 建立一個HorizontalDoor類別,它繼承了原先的Door,所以它也有Open與Close這兩個方法可以用
class HorizontalDoor : Door { }
- 建立一個VerticalDoor類別,它也繼承了Door,可是我在裡面override了原先的Open與Close,另外實作其方法
class VerticalDoor : Door { public override void Open() { Console.WriteLine("Open vertically"); } public override void Close() { Console.WriteLine("Close vertically"); } }
- 建立一個IAlarm介面,裡面定義了Alert這個方法
interface IAlarm { void Alert(); }
- 建立一個Alarm類別,它繼承了IAlarm,並在裡面實作Alert
class Alarm : IAlarm { public void Alert() { Console.WriteLine("Ring ~~"); } }
- 建立一個AlarmDoor類別,它繼承了Door,同時在裡面使用了Alarm類別的Alert方法
class AlarmDoor : Door { private IAlarm _alarm; public AlarmDoor() { _alarm = new Alarm(); } public void Alert() { _alarm.Alert(); } }
- 建立一個AutoAlarmDoor類別,它繼承了AlarmDoor,並覆寫了原本的Open方法,裡面呼叫base.Open方法並接著呼叫Alert方法
class AutoAlarmDoor : AlarmDoor { public override void Open() { base.Open(); Alert(); } }
- 建立一個DoorController類別,這個類別是用來控制管理所有的Door
class DoorController { protected List<Door> _dootList = new List<Door>(); public void AddDoor(Door Door) { _dootList.Add(Door); } public void OpenDoor() { foreach (var item in _dootList) { item.Open(); } } }
- 完成 !!
static void Main(string[] args) { DoorController dc = new DoorController(); dc.AddDoor(new HorizontalDoor()); dc.AddDoor(new VerticalDoor()); dc.AddDoor(new AlarmDoor()); dc.AddDoor(new AutoAlarmDoor()); dc.OpenDoor(); Console.ReadLine(); }
- 執行結果
- 注意事項
- abstract method 不會有程式內容
- abstract method 繼承後,一定要 override
- virtual method 一定要有程式內容
- 宣告為 virtual 的 method,繼承後才可以進行 override
- 設定為 virtual 的 method,沒有一定要 override