iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 24
0
自我挑戰組

初心者學C#系列 第 24

Day 24:C#的繼承 [̲̅$̲̅(̲̅ ͡ಠ_ಠ)̲̅$̲̅]

  • 分享至 

  • xImage
  •  

※以下內容皆是新手撰寫,內容可能不完全正確

有點好奇今天講的這什麼東西,為什麼在前面講了那麼多,卻排在教學比較後面的地方(???)或許前面的不懂,這個就沒辦法懂了?

今天的主題是 繼承(inheritance) ,看起來超重要,也有人說不怎麼重要,不過我認為重不重要並不重要,橫豎都要學,就學唄。
繼承讓寫程式的人可以用B類別定義A類別,進而使程式的開發及維護更輕鬆,可重複使用同一功能(回收再利用?),提升執行速度。
創造新的類別可以土法煉鋼、萬丈高樓平地起,也可以讓新的類別繼承某已存在類別的類別成員,已存在的某類別稱為 類基(base class) ,新造出來的類別稱為 衍生類別(derived class)

類基和衍生類別
一個類別可以是從一個數個其他類別和介面衍生而來(可以從不同的地方獲取資料+功能)。講到這裡,有個重要的地方,就是 C#程式語言只支援單繼承(single inheritance) ,也就是說一個新的類別只能從一個已存在的類別繼承內容;不過,C#裡面可以一層一層繼承,也稱遞移,是A繼承B、B繼承C、C繼承D,以此類推,所以還是可以間接繼承到前面類別裡的東西的。

生出衍生類別的語法如下:

<存取規格符> class <類基>{
//程式碼
}
class <衍生類別> : <類基>{
//程式碼
}

再來是一個繼承的小(大)練習:

using System;
namespace CubeApplication
{

    class Stats
    {
        public void Eheight(int h)
        {
            height = h;
        }
        public void Eweight(int w)
        {
            weight = w;
        }
        protected int height;
        protected int weight;
    }
    class Bmi : Stats {
        public double CalcBmi()
        {
            return (weight / ((height/100)^2));
        } 
            }
    class BmiCalc
    {
        static void Main(string[] args)
        {
            Bmi b = new Bmi();
            b.Eheight(166);
            b.Eweight(57);
            Console.WriteLine("BMI: {0}", b.CalcBmi());
        }
    }
    }

這樣會輸出所計算的BMI:

BMI: 19

類基的初始化(initializing the base class) :由於類基裡的東西要給衍生類別繼承,類基中的物件要先做好。

還有一點要注意的是,有些類基的類別成員是不會被衍生類別繼承的,像是 靜態建構器(static constructors)實例建構器(instance constructors)終結器(finalizers)
更詳細的繼承規則:https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/inheritance

今天發現Visual Studio需要弄個Microsoft帳號才能繼續使用 ˊˇˋ 寫著寫著頭好痛,繼承的規則好多,感覺不是一天兩天就能熟悉的。下一篇的主題是多型(polymorphism),這單字讓我想到小時候玩的神奇寶貝遊戲,進化什麼的(你個肥宅)。

參考資料:
(a) Tutorialspoint; C# - Inheritance
https://www.tutorialspoint.com/csharp/csharp_inheritance.htm
(b) Microsoft; Inheritance in C# and .NET
https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/inheritance


上一篇
Day 23:C#的類別(下)(ಠヮಠ)
下一篇
Day 25:C#的多型 (‘∀’●)♡
系列文
初心者學C#30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言