C#資料群集系列菜單-『列舉(Enum)』

摘要:C#系列菜單-『列舉(Enum)』

包大人: 有錢人總是有多重身份,討厭~!。
有為:可是十三叔你也有多重身份,貪官、鼠輩、九品小官,但還是一樣沒錢啊~
包大人: 對啊~我也不要知道為什麼啊~!?
 

 

~本文主題~
『列舉(enum)是啥呢??』
本文主要介紹列舉(enum)的是什麼與基本用法。
 

 

~正文開始~
『列舉(enum)是啥呢??』
 
列舉(enum)是什麼呢?
enum是針對某資料片段只允許特定值的『資料型別(Type)』。
好文言文,我們建個範例比較容易了解。
在此範例定義名為Suits的enum。定義所允許的花色。
 
(這只是英文翻譯一下)
Spades = 黑桃
Clubs = 梅花
Diamonds = 方塊
Hearts = 紅心
 

 public enum Suits
        {
            Spades = 0,
            Clubs = 1,
            Diamonds = 2,
            Hearts = 3,
        }
輸出。

   private void button1_Click(object sender, EventArgs e)
        {
         
            Console.WriteLine(Suits .Clubs);
            Console.WriteLine((int )Suits.Clubs);
        }

執行結果

 

Enum不使用預設Int

有時候,預設的Int型別不適合我們的需求,例如
有個數字非常大,Int就沒辦法使用,我們需要使用
long型別,因此我們可以改成下列程式碼。
 

  public enum Suits : long  //在這修改預設的型別
        {
            Spades = 0,
            Clubs = 200000000000005,
            Diamonds = 2,
            Hearts = 3,
        }

 

執行結果
 
這邊注意一下Enum所允許的型別
 
Enum型別(它本來就是型別的一種)
我們建立一個範例,主要就是隨機抽卡,
然後顯示所抽到的花色與值的小小程式。
 
首先我們建立兩個Enum
Suits : 建立花色的列舉並給每個花色所代表的數字。
Values : 建立值的列舉, 並給每個值所代表的數字。

 public enum Suits
        {
            Spades = 0,
            Clubs = 1,
            Diamonds = 2,
            Hearts = 3,
        }
        public enum Values
        {
            Ace = 1,
            Two = 2,
            Three = 3,
            Four = 4,
            Five = 5,
            Six = 6,
            Seven = 7,
            Eight = 8,
            Night = 9,
            Ten = 10,
            Jack = 11,
            Queen = 12,
            King = 13,
        }
再建立個樸克牌的類別
兩個欄位
suit : 存放抽到的花色,型別為Suits列舉。
value : 存放抽到的值 ,型別為Values列舉。
(註:別忘了我們上章所說的封裝性概念,不該出現的就不要出現)
 
一個屬性
Name : 回傳抽到的值與花色的名稱

 public class Card
        {
            //建立Suits 型別 名為Suit的欄位。
            //存放抽到的花色。
            private  Suits suit;

            //建立Values 型別 名為Value的欄位
            private  Values value;

            //建構子,實體化時給予初使值
            //物件實體化時,將押到的花色與值代入至suit與value欄位。
            public Card(Suits suit, Values value)
            {
                this.suit = suit;
                this.value = value;
            }


            //建立唯讀Name屬性。
            //回傳所押到的花色與值。
            public string Name
            {
                get
                {
                    return suit.ToString() + " Of " + value.ToString();
                }

            }  
        }

 

執行抽牌

 private void button1_Click(object sender, EventArgs e)
        {
            //實體化Random類別為random物件。
            Random random = new Random();
            //實體化Card類別,產生card物件。
            Card card = new Card((Suits)random.Next(4), ( Values)random.Next(1, 14));
            MessageBox.Show(card.Name);
        
        }

 

其中Random為產生亂數之類別。我們需要使用到Random裡的Next方法,
來產生範圍內的亂數,例如 random.Next(1,14)就會產生1~14的隨機數字。

  //
        // 摘要:
        //     傳回指定範圍內的亂數。
        //
        // 參數:
        //   minValue:
        //     傳回亂數的內含下限 (Inclusive Lower Bound)。
        //
        //   maxValue:
        //     傳回亂數的獨佔上限。 maxValue 必須大於或等於 minValue。
        //
        // 傳回:
        //     32 位元帶正負號的整數大於或等於 minValue,並且小於 maxValue;也就是說,傳回值的範圍包含 minValue 但不包含 maxValue。
        //     如果 minValue 等於 maxValue,會傳回 minValue。
        //
        // 例外狀況:
        //   System.ArgumentOutOfRangeException:
        //     minValue 大於 maxValue。
        public virtual int Next( int minValue, int maxValue);

 

最後執行結果
 
注意
在上述的範例中,我們來看看一下比較特殊的程式碼,
 
下列行程式碼。

 Card card = new Card((Suits)random.Next(4), ( Values)random.Next(1, 14));
我們來看看 (Suits)random.Next(4) ,這行是會產生什麼。
我們增加一行  Console .WriteLine(this .suit);
 

 public Card( Suits suit, Values value)
            {
                this.suit = suit;
                Console.WriteLine(this .suit);
                this.value = value;
               // Console.WriteLine(this.value);
            }

執行結果,可以知道運用Random他會產生數字,但他在前面加(Suits)
就會自動將他轉換成對應的英文字了。

 

 



小弟才書學淺~請各位客官指教指教~~~

小弟日 : 你要知道自已不是帥哥,你才有可能變成帥哥 。