※以下內容皆是新手撰寫,內容可能不完全正確
有點好奇今天講的這什麼東西,為什麼在前面講了那麼多,卻排在教學比較後面的地方(???)或許前面的不懂,這個就沒辦法懂了?
今天的主題是 繼承(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