索引子get; set;
索引子(indexer) 是用來處理資料用的,也就是get和set,這在程式設計中很常用到,分別是用來取值和設定值,善用索引子可以讓程式更好維護。
假設今天做一個紙牌類遊戲,玩家只要有一定金額的籌碼就可以遊戲,如果在一輪遊戲中輸掉太多錢,籌碼不夠付,這時籌碼仍然為0,不會變成負的,這就可以使用索引子(indexer)來做。
如下建立一個Player類別,並且宣告變數money和Money,Money字首大寫和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:使用者設定的數值。
*注意在get和set裡面不要把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,這時候變數就會變成唯讀屬性了。
學會活用索引子在寫程式時會相當有幫助。
留言列表