iT邦幫忙

2

【C#】物件導向的三大特性

c#
  • 分享至 

  • xImage
  •  

今天我們來看到~物件導向的三大特性~

什麼是物件呢~ 物件是指類別的實例

例如,有一個類別是Car,我們可以將它實例化。

Car car=new Car(); //(小寫的)car就是物件

物件是物件導向程式的基本單位,它將程式和資料裝進去,提高軟體的重用性、靈活性和擴充性。

因此,我們可以用物件來存取及修改物件中的相關資料。

知道物件導向的基本概念後,我們去探究它的三大特性吧,封裝、繼承、多型~


學習目標: C#三大特性的概念

學習難度: ☆☆☆


封裝顧名思義就像是將一堆汽車零件(欄位、屬性、方法)封裝到汽車中(類別)。

例如,有一個類別是Car,我們可以將Car的相關資料存放在類別中。


public class Car
{

    public int weight=10;

    private string brand=toyota; //brand用在Car類別的運算

    public string Brand  //Name用在外部類別的讀取
    {
        get{return brand;} //外部讀取時會return toyota (brand)

        set{brand=value;}
    }

}

因此,我們要使用時,就能用Car去使用裡面的資料拉(weight, brand)~

例如,有一個業務員的類別,他想知道汽車的品牌是什麼。

我們就可以透過Car去讀取品牌的名字~

public class Bussiness
{

    Car car=new Car();

    Console.WriteLine("汽車的品牌是"+car.Brand);

}

繼承是指一個類別(子類別)去繼承另一個類別(父類別)的概念。

有點像小孩會繼承父親的特性~

所以子類別就能使用父類別的資料拉~

我們來看到繼承是如何被實現的。

public class Father
{

    public string name="William";

}

public class Child : Father
{


}

public calss Introduction
{

    Father father=new Father();

    Child child=new Child();

    child.name="Wilson";

    Console.WriteLine(father.name); //印出William

    Console.WriteLine(child.name); //印出Wilson

}

重點來拉~ Child中的name就不用在重新宣告了~

這樣程式碼是不是就簡潔多了呢~

接著~我們來看看其他繼承相關的規則~

C#只有單一繼承沒有多重繼承~

意思就是Child只能繼承Father~ 不能在繼承其他類別~

另外~在設計的時候~ 繼承的子類別要盡量與父類別有依存關係~

例如~ 麵包是食物~ 汽車是交通工具~ 小孩是父親的


多型是指父類別為子類別提供統一的虛擬(virtual)方法,子類別可以覆蓋(override)父類別的方法。

換句話說,子類能使用父類別的虛擬方法,但他們能輸出不一樣的結果

那我們來看一個例子吧~

    public class Father //父類別
    {
        public string words;

        public virtual string Talk() //父類別宣告虛擬方法
        {
            words = "I can talk, and I am a father";

            return words;
        }
    }
    public class Child1:Father //子類別,Child1
    {
        public override string Talk() //子類別複寫虛擬方法
        {
            words = "I can talk too, and I am a child 1";

            Console.WriteLine(words + "\n");

            return words;
        }
    }

    public class Child2 : Father //子類別,Child2
    {
        public override string Talk() //子類別複寫虛擬方法
        {
            words = "I can talk too, and I am a child 2";

            Console.WriteLine(words + "\n");

            return words;
        }
    }

    class MainProgram
    {
        static void Main()
        {
            Child1 child1 = new Child1();

            Child2 child2 = new Child2();

            Father[] fathers = { child1, child2 }; //宣告父類別的陣列,裝子類別

            foreach (Father father in fathers) 
            {
                father.Talk(); //讓父類別陣列的子類都講話
            }
        }
    }

參考資料:

https://www.youtube.com/watch?v=nYCMW3kfTvs&feature=youtu.be&ab_channel=BroCode


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
glj8989332
iT邦研究生 4 級 ‧ 2022-04-01 18:47:34

如果程式碼縮排調整 會更好

好~ 謝謝您的指教~

我要留言

立即登入留言