iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 4
0
Modern Web

征服C#系列 第 16

Day16 物件導向封裝性-所以到底甚麼是封裝性?

  • 分享至 

  • xImage
  •  

上回的答案(參考)

Class Player

class Player
    {
        //1.欠缺計算總值的程式碼、2.欠缺存取飢餓度的程式碼
        //property 金子50、銀子25、銅10
        private int CountGold;
        private int CountSilver;
        private int CountCopper;
        //get存取totalvalue
        private int TotalValue;
        public int totalValue
        {
            get
            {
                TotalValue = 50 * CountGold + 25 * CountSilver + 10 * CountCopper;
                return TotalValue;
            }
        }
        //get 、set存取hungerRate,必須介於 0~100 之間
        private int HungerRate;
        public int hungerRate
        {
            get { return HungerRate;}
            set
            {
                if (value >= 100)
                    HungerRate = 100;
                else if(value <= 0)
                    HungerRate = 0;
                else
                    HungerRate = value;
            }
        }
        //constructor
        public Player()
        {
            this.CountGold = 0;
            this.CountSilver = 0;
            this.CountCopper = 0;
            this.HungerRate = 80;
        }
        public void PickaGold()
        {
            CountGold++;
        }

        public void PickaSilver()
        {
            CountSilver++;
        }

        public void PickaCopper()
        {
            CountCopper++;
        }
    }

主程式

private void Button1_Click(object sender, EventArgs e)
        {
            Player player = new Player();

            player.PickaGold();
            player.hungerRate += 10; // 餓了,飢餓度上升

            player.PickaSilver();
            player.hungerRate += 10; // 餓了,飢餓度上升

            player.PickaSilver();
            player.hungerRate += 10; // 餓了,飢餓度上升

            MessageBox.Show("飢餓度:" + player.hungerRate + ",身上物品總值:" + player.totalValue);

            player.PickaCopper();
            player.hungerRate -= 60; // 吃了一個可以減少 60 飢餓度的東西

            player.PickaGold();
            player.hungerRate -= 60; // 吃了一個可以減少 60 飢餓度的東西

            MessageBox.Show("飢餓度:" + player.hungerRate + ",身上物品總值:" + player.totalValue);

        }

好了可以來講一下什麼是封裝性了先上一下圖

https://ithelp.ithome.com.tw/upload/images/20191002/20119848CxyiK1AU2j.png

說明:

圖中車子停進去立體停車場在吐出一個號碼牌,那這個跟封裝性什麼關係呢?今天我把車子放進立體停車場我不需要知道裡面的運作方式

封裝性(Encapsulation):

打包、把東西封起來隱藏內部的實作細節並提供介面供使用

Tightly Encapsulated(緊密封裝):

把所有物間變數設定成private,只有提供public method操作或 Get&Set 存取器來供外界操作變數

封裝性好處:

1.保護物件內的變數
2.物件內部的實作細節隱藏起來,使用者只要會用就好了

結語:謝謝大家內心看完,如有錯誤請跟我說我會趕緊修正謝謝,下回開始進行物件導向的繼承性囉!


上一篇
Day15 物件導向封裝性-Get & Set 存取器
下一篇
Day17 物件導向繼承性
系列文
征服C#21
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言