索引子get; set;

 

索引子(indexer) 是用來處理資料用的,也就是getset,這在程式設計中很常用到,分別是用來取值和設定值,善用索引子可以讓程式更好維護。

假設今天做一個紙牌類遊戲,玩家只要有一定金額的籌碼就可以遊戲,如果在一輪遊戲中輸掉太多錢,籌碼不夠付,這時籌碼仍然為0,不會變成負的,這就可以使用索引子(indexer)來做。

如下建立一個Player類別,並且宣告變數moneyMoneyMoney字首大寫和money做區分,Money是使用索引子處理以後的資料,程式如下:

public class Player

    {

        private int money=1000;

        public int Money

        {

            get { return money*10; } //一台幣換10遊戲幣

            set

            {

                if (value < 0)

                    money = 0;   //籌碼小於零仍然是零,不會變成負的

                else

                    money = value;

            }

        }

    }

get:讀取數值時做的動作。

set:設定數值時做的動作。

value:使用者設定的數值。

 

*注意在getset裡面不要把money打成Money,會變成一直呼叫自己的迴圈出不來,造成程式錯誤。如下:

get { return Money*10; }

set

{

   if (value < 0)

    Money = 0; 

   else

    Money = value;

}

 

在上面的程式中,假設玩家在一場遊戲中大輸,他的籌碼不夠付,這時籌碼仍然會是0,不會是負值,程式和輸出結果如下:

 

Console.WriteLine("玩家的金錢:" + player.Money);

player.Money -= 50000;  //一輪遊戲中大輸

Console.WriteLine("玩家的金錢:" + player.Money);

 

輸出結果

玩家的金錢:10000

玩家賭輸遊戲幣50000

玩家的金錢:0

 

 

籌碼輸光之後玩家可以再儲值,籌碼就是0加上儲值的遊戲幣,程式和輸出結果如下:

 

player.Money += 2000;   //玩家儲值

Console.WriteLine("玩家儲值2000");

Console.WriteLine("玩家的金錢:" + player.Money);

 

輸出結果

玩家儲值2000

玩家的金錢:20000

 

 

本範例的完整程式碼如下:

class Program

    {

        static void Main(string[] args)

        {

            Player player = new Player();

 

            Console.WriteLine("玩家的金錢:" + player.Money);

            player.Money -= 50000;  //一輪遊戲中大輸

            Console.WriteLine("玩家賭輸遊戲幣50000");

            Console.WriteLine("玩家的金錢:" + player.Money);

            player.Money += 2000;   //玩家儲值

            Console.WriteLine("玩家儲值2000");

            Console.WriteLine("玩家的金錢:" + player.Money);

 

            Console.ReadKey();

        }

    }

 

    public class Player

    {

        private int money=1000;

        public int Money

        {

            get { return money*10; } //一台幣換10遊戲幣

            set

            {

                if (value < 0)

                    money = 0;   //籌碼小於零仍然是零,不會變成負的

                else

                    money = value;

            }

        }

    }

 

輸出結果

玩家的金錢:10000

玩家賭輸遊戲幣50000

玩家的金錢:0

玩家儲值2000

玩家的金錢:20000

 

 

使用get和set是為了防止一些意外操作,所以先把變數設定為private,然後使用索引子get和set來取值和設定,使用索引子可以取代宣告一個method來做中介。

另外有一個小技巧,就是如果有的變數不希望被修改,就可以只保留get,這時候變數就會變成唯讀屬性了。

     學會活用索引子在寫程式時會相當有幫助。

arrow
arrow
    文章標籤
    索引子 indexer
    全站熱搜
    創作者介紹
    創作者 波羅、希夏普2020 的頭像
    波羅、希夏普2020

    希夏普2020的程式天地

    波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()