C# - 繼承性

繼承性 (Inheritance)

  1. 要使用繼承,需要在定義 class 的時候,在 class 名稱後面加上「:]與被繼承的 class 名稱

例如要使 class A 繼承 class B

1
2
3
class A:B{
....
}
  1. 可讓物件繼承其他物件具有的屬性與行為。 成員被繼承的類別稱為「基底類別」(Base Class),而繼承這種成員的類別即稱為「衍生類別」(Derived Class)。 衍生類別只能有一個基底類別。透過繼承把多個 Class 重複的程式碼寫在同一個 Class 以減少「Class 之間」的重複程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 基底類別
class Creature
{
private int hp=100;
public int GetHP()
{
return hp;
}

public void injured(int injurePoint)
{
hp -= injurePoint;
}
}
1
2
3
4
5
6
7
8
9
10
//衍生類別
class Monster:Creature
{


public int Attack()
{
return 10;
}
}
1
2
3
4
5
6
7
8
9
//衍生類別
class Villager:Creature
{

public String Talk()
{
return "You jump I jump";
}
}
1
2
3
4
5
6
7
8
9
private void button1_Click(object sender, EventArgs e)
{
Villager vi = new Villager();
Monster mon = new Monster();
vi.injured(mon.Attack());
MessageBox.Show("" + vi.GetHP());
MessageBox.Show("" + mon.GetHP());

}
  1. 繼承是可轉移的。如果 ClassC 衍生自 ClassB ,且 ClassB 衍生自 ClassA,則 ClassC 繼承 ClassB、ClassA 的成員

  2. 也可以利用繼承減少「Class 內部」的重複程式碼。
    例如:如果要讓怪物攻擊不同的生物,像是村民或雞,可能就要替不同生物撰寫不同版本的 Attack:

1
2
3
4
5
6
7
public void Attack(Villager villager) {
....
}

public void Attack(Monster monster) {
....
}

但因為 Villager 與 Monster 都繼承自 Creature,所以可以這樣寫

1
2
3
4
5
6
7
8
9
10
11
12
13
class Creature
{
private int hp=100;
public int GetHP()
{
return hp;
}

public void injured(int injurePoint)
{
hp -= injurePoint;
}
}
1
2
3
4
5
6
7
8
9
10
class Monster:Creature
{


public void Attack(Creature c)
{
c.injured(10);

}
}
1
2
3
4
5
6
7
8
class Villager:Creature
{

public String Talk()
{
return "You jump I jump";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
private void button1_Click(object sender, EventArgs e)
{
Villager vi = new Villager();
Monster mon = new Monster();
Monster mon2 = new Monster();
//vi.injured(mon.Attack());
mon.Attack(vi);
mon.Attack(mon2);
MessageBox.Show("村民" + vi.GetHP());
MessageBox.Show("怪1" + mon.GetHP());
MessageBox.Show("怪2" + mon2.GetHP());
}

只要是 Creature 或是它的衍生類別,都可以被傳入 Attack 處理
這樣就可以大大減少 Class 內部的重複程式碼

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2020 CYC'S BLOG All Rights Reserved.

UV : | PV :