iT邦幫忙

0

C# 入門筆記04(繼承)

c#

物件導向


這單元主要是讓大家了解物件導向的基本實作
物件導向有三大特性:

  • 封裝
  • 繼承
  • 多型

封裝

類別的內部成員可以封裝起來,讓別人不知道其如何實作,只能透過它提供的公開類別成員來進行操作,封裝的觀念和抽象化類似,但多了安全的概念,使用者只能使用公開的屬性或方法,不可以直接存取類別私有的屬性或方法。

要存取類別私有的屬性或方法,需透過類別公開的方法,而設計師可在這些公開的方法中先做安全性檢查。

例如:一台電視,只要能看就好,使用者不需知道其構造和原理,透過電視的面板或搖控器來進行操作如果電視沒有封裝,使用者看電視時會許就得自己把電線找出來接在一起 ⇒ 操作複雜且不安全

繼承

繼承讓程式碼可以重複使用。就以車子、汽車與卡車的例子來說吧。我們把大部分重複的程式碼寫在車子的類別裡,以後的十種汽車跟八種卡車都可以直接享用車子中已經定義好的程式碼與功能。我們因此縮短了浪費在重複性工作上的時間。
簡單的來說:可以讓物件繼承其他物件具有的屬性與行為

多型

多型跟繼承有很大的關係,以老鷹與企鵝來比喻:
老鷹與企鵝都是繼承鳥綱但是兩者最快速移動方式
老鷹是飛翔,企鵝是游泳,他們都繼承鳥類所有繼承特徵與行為,但移動的行為老鷹是在天上飛最快,企鵝在海裡遊最快,同樣都是移動,但行為不同,結果一樣這就是多型

一、物件繼承範例


創建三個元件,分別為Creature、Villager、Monster
有沒有發現到Villager與Monster的class後都有繼承Creature

Creature

class Creature
    {
        private int hp = 100;

        public int GetHP()
        {
            return hp;
        }
        public void Injured(int injuredPoint)
        {
            hp -= injuredPoint;
        }
    }

Villager

class Villager : Creature
    {
        public String Talk()
        {
            return "Hello World";
        }
    }

Monster

class Monster : Creature
    {
        public int attack()
        {
            return 10;
        }
    }

Form

創建Villager與Monster的新物件
試著呼叫b.GetHP(),卻能得到100的值,但是Monster裡沒有GetHP()這個function,為什麼可以呼叫到Creature裡的function,答案是因為Monster繼承了Creature

我將b.attack的值,塞入a.Injured
hp預設為100,將10塞入Injured,hp = 100 - 10
因此return出來的值就為90。

 private void submit_Click(object sender, EventArgs e)
        {
            Villager a = new Villager();
            Monster b = new Monster();
            a.Injured(b.attack());

            MessageBox.Show("" + b.GetHP()); //100
            MessageBox.Show("" + a.GetHP()); //90
        }

尚未有邦友留言

立即登入留言