iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
Software Development

C# 學習之路系列 第 7

[DAY6] C#基礎與實作(繼承. 多型)

  • 分享至 

  • xImage
  •  

C# 程式基礎

  在 C# 中,繼承和多型是物件導向程式設計(OOP)的核心概念之一。
  繼承:允許一個類別(稱為子類別或衍生類別)繼承另一個類別
     (稱為基底類別或父類別)的屬性和方法。
  多型:允許不同的類別實現相同的方法名稱,但具有不同的實作。

繼承(Inheritance):

  繼承是一個子類別可以繼承父類別的特性(屬性和方法)的概念。
  子類別可以擴展或修改父類別的行為,同時繼承其共同特性。

繼承的語法:

C# 的繼承需使用關鍵字符號":",語法如下:
     存取修飾詞 class 子類別名稱: 父類別名稱
     {
         //子類別欄位、屬性與方法
     }

單繼承 (Single Inheritance):

單繼承是指一個類別只能繼承自另一個類別
PS. C# 不支持多重繼承(即一個類別同時繼承多個類別)

  • 圖示舉例:
    https://ithelp.ithome.com.tw/upload/images/20230919/20163217wEsKdLCKRS.png

  • 程式範例:

    // 定義父類別 
    class Animal { //對應上方圖示Class A
        public string Name { get; set; }
        public void Eat() {
            Console.WriteLine("動物正在進食。");
        }
    }

    // 定義子類別
    class Dog : Animal {  //對應上方圖示ClassB
        public void Bark() {
            Console.WriteLine("狗正在叫。");
        }
    }

在這個範例中,我們定義了一個 Animal 父類別和一個 Dog 子類別。Dog 子類別繼承了 Animal 父類別的 Eat 方法,並添加了自己的 Bark 方法。

分層繼承 (Hierarchical Inheritance):

  • 圖示舉例:
    https://ithelp.ithome.com.tw/upload/images/20230919/20163217Kn0QYEoyZB.png
  • 程式範例:
    // 定義父類別 
    class Animal { //對應上方圖示Class A
        public string Name { get; set; }
        public void Eat() {
            Console.WriteLine("動物正在進食。");
        }
    }

    // 定義子類別
    class Dog : Animal { //對應上方圖示ClassB
        public void Bark() {
            Console.WriteLine("狗正在叫。");
        }
    }

    // 定義子類別
    class Cat : Animal { //對應上方圖示ClassC
        public void Meow() {
            Console.WriteLine("貓正在喵喵叫。");
        }
    }

  在這個示例中,Dog 和 Cat 類別都繼承自 Animal 類別,每個子類別有自己的獨特方法。

多層次繼承 (Multiple-Level Inheritance):

  • 圖示舉例:
    https://ithelp.ithome.com.tw/upload/images/20230919/20163217a819vtr8Y7.png
  • 程式範例:
    // 定義父類別 
    class Animal { //對應上方圖示Class A
        public string Name { get; set; }

        public void Eat() {
            Console.WriteLine(Name + "正在進食。");
        }
    }

    class Mammal : Animal {  //對應上方圖示ClassB
        public void Breathe() {
            Console.WriteLine(Name + "是哺乳動物,正在呼吸。");
        }
    }

    class Dog : Mammal { //對應上方圖示ClassC
        public void Bark() {
            Console.WriteLine(Name + "是狗,正在叫。");
        }
    }

  這個範例中,Dog 類別多層次繼承自 Animal 和 Mammal 類別,並添加了自己的方法。
  PS. 這邊要注意,多層次繼承可能會讓程式碼變得更複雜,因此要謹慎使用。


多型(Polymorphism):

  多型允許不同的類別實現相同的方法名稱,但具有不同的實作。
  這使得代碼更具靈活性,因為你可以在運行時決定要呼叫的方法。

  • 程式範例:
    // 定義父類別
    class Animal {
        public virtual void MakeSound() {
            Console.WriteLine("動物發出聲音。");
        }
    }

    // 定義子類別
    class Dog : Animal {
        public override void MakeSound() {
            Console.WriteLine("狗發出「汪汪」的聲音。");
        }
    }

    // 定義另一個子類別
    class Cat : Animal {
        public override void MakeSound() {
            Console.WriteLine("貓發出「喵喵」的聲音。");
        }
    }

    class Program {
        static void Main() {
            // 創建不同的子類別物件
            Animal myAnimal = new Animal();
            Dog myDog = new Dog();
            Cat myCat = new Cat();

            // 使用多型呼叫方法
            Animal[] animals = { myAnimal, myDog, myCat };
            foreach (Animal animal in animals) {
                animal.MakeSound();
            }
        }
    }

  在這個範例中,我們定義了一個 Animal 父類別和兩個子類別 Dog 和 Cat。每個子類別都覆寫了父類別的 MakeSound 方法,實現了不同的聲音。
這邊創建了一個 Animal class,其中包含不同的子類別物件,然後使用多型的方式呼叫它們的 MakeSound 方法,這樣可以根據實際物件的類型來決定要呼叫的方法。

  繼承和多型是物件導向程式設計的強大工具,好好使用可以幫助我們建立更具組織性和可擴展性的程式碼。

程式實作練習:

  沒在leetcode中找到特別相關繼承的考題
  如果有朋友有看到也可以跟我說 我補充上來
  這邊可以看w3schools cs_inheritance練習實作

參考來源

  1. ChatGPT
  2. C#最強入門邁向頂尖高手之路王者歸來
  3. w3schools C#
  4. geeksforgeeks : C# | Inheritance

期望挑戰30天持續更新成功 ~ DAY6


上一篇
[DAY5] C#基礎與實作(類別. 物件)
下一篇
[DAY7] C#基礎與實作(抽象類別.介面)
系列文
C# 學習之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言