C#中的枚舉和結構體

   枚舉:
     1.枚舉的聲明
      用enum關鍵字修飾,加枚舉名
    enum 枚舉名
    {
      值1,
      值2,
      值3,
      ````
    }
     2.什麼時候使用枚舉
         在確定值的數量和值的時候使用枚舉,規範程序的開發
 
    3.枚舉的賦值
        枚舉名 變量名=枚舉名.值;
        Day nowDay = Day.星期一;
 
結構體:
            結構體的聲明 用struct關鍵字修飾,加結構體名
結構體的使用:
    結構體中可以存儲不同類型的數據,一般都是每個個體共同擁有一些屬性時使用結構體
    struct Student
    {
      變量類型 變量名;
      變量類型 變量名;
    }
 
    結構體中的方法:
          結構體中的方法
              <1>如果方法是靜態的那麼不能使用結構體中非靜態的屬性
              <2>如果方法是非靜態的那麼可以使結構體中的靜態和非靜態的屬性
              <3>調用靜態方法需要用  "結構體名.方法名" 來調用,非靜態方法直接用變量名調用
              <4>調用靜態屬性需要用  "結構體名.屬性名" 來調用,非靜態屬性直接用變量名調用
              
 
    
 
代碼示例
 
using System;
using System.Reflection;
namespace 第十章枚舉和結構體
{
#region 枚舉
   
    //枚舉的聲明  用enum關鍵字修飾,加枚舉名
    //枚舉類型中默認存儲的是int類型的,並且後面的值總是前一個值加一;
    enum Day : int   //枚舉名後面可以加上限制,但是限制的類型只能是整形 int ,long ,short 等;
    {
        星期一 =0,
        星期二 =1, //枚舉中的值可以通過等號改變
        星期三,
        星期四,
        星期五,
        星期六,
        星期日
    }
    #endregion
#region 結構體
   
    //結構體的聲明 用struct關鍵字修飾,加結構體名
    //結構體中可以存儲不同類型的數據,一般都是
    struct Student
    {
        public string name;
        public  Xingb xingbie;  //結構體可以和枚舉連用
        public  int  age;
        public  string banji;
        public bool youden;
    }
    enum Xingb
    {
        男,
        女
    }
  
    #endregion
    class Program
    {
     #region 結構體中的方法
        //定義一個結構體
        struct Teacher
        {
            public static string name;
            public int age;
            //非靜態方法可以使用靜態的屬性
            public void Jieshao()
            {
                Console.WriteLine("你好,我是:"+name+"我今年"+age);
            }
            //靜態方法方法中不能使用非靜態的屬性
            public static void Kecheng()
            {
                Console.WriteLine("我教你們語文課程"+name);
            }
        }
        #endregion
        static void Main(string[] args)
        {
#region 枚舉
          
            //小飛經常出去旅遊,但是每次出去對日期總是很糾結,
            //用使用枚舉幫小飛隨機選擇出去旅遊的日子
            Random _ran = new Random();
            //因爲枚舉時從0開始,後面是前面數字加1,所以取值爲 0到7,但不包括7.
            int _numDay = _ran.Next(0,7);
           
     #region 枚舉與int類型的相互轉換
            Day nowDay = Day.星期一;
            //枚舉類型可以轉換成int類型
            int num = (int)nowDay;
            //因爲枚舉類型默認是整數類型,並且第一個值從0開始,所以星期一轉換成int 類型值就是0
            Console.WriteLine(num);
            //int轉換爲枚舉類型(在這我們用隨機數來確定小飛的出遊時間)
            Day _nowDay1 = (Day)_numDay; //int轉換枚舉時要注意枚舉中的值是否存在
            //打印小飛出遊的時間
            Console.WriteLine(_nowDay1 );
            #endregion
     #region 枚舉類型與string類型之間的轉換
            //將枚舉轉換成字符串
            Day strDay = Day.星期三;
            //枚舉可以使用.ToString();方法
            string _strDay1 = strDay.ToString();
            Console.WriteLine(_strDay1);
            //將string類型轉換爲枚舉
            //在這我們用上面的隨機數,先將隨機數轉換爲string,方便學習string轉換爲枚舉
            string _strDay2 = _numDay.ToString();
            //string中有個Parse方法可以將string轉換爲枚舉
                            //  該方法需要兩個參數,一個是類型,一個是string類型的變量
                             //我們需要獲取這個枚舉類型 這裏使用 typeof(類型)方法獲取枚舉類型
                             //後面的代碼只是將類型轉換爲枚舉,但是我們需要轉換爲Day類型使用
                             //所以加了一個強轉
            Day str3NowDay = (Day)Enum.Parse(typeof(Day),_strDay2);
            //上面代碼中的字符串可以是枚舉中的字符串值 如"星期一",如果字符串是數字值,枚舉中沒有
            //該數字值那麼不會報錯,但是如果是 "星期一"這種類型的值,枚舉中沒有的話會報異常
            //打印出的結果跟上述一樣
            Console.WriteLine(str3NowDay);
            #endregion
            #endregion
#region 結構體
            //使用結構體首先要聲明一個結構體類型
            Student stu1;
            //爲結構體賦值,在結構體外賦值結構體中的變量必須是 Public(公開的)修飾的
            stu1.name = "張三";
            stu1.age = 16;
            stu1.xingbie = Xingb.男;
            stu1.banji = "六年級一班";
            stu1.youden = false;
            Student stu2;
            stu2.name = "李紅";
            stu2.age = 15;
            stu2.xingbie = Xingb.女;
            stu2.banji = "六年級一班";
            stu2.youden = true;
            //打印李紅的信息
            Console.WriteLine("姓名:"+ stu2.name+"\n年齡:" +
                      ""+ stu2.age+"\n性別:"+ stu2.xingbie+"\n優等生:"
                      + stu2.youden+"\n班級:"+ stu2.banji);
     #region 結構體中方法的使用
            Teacher ter1;
            //靜態屬性和靜態方法一樣都需要用結構體名調用
            Teacher.name = "楊雪";
            //非靜態屬性和方法直接使用變量名調用
            ter1.age = 21;
            ter1.Jieshao();
            Teacher.Kecheng();
            #endregion
            #endregion
        }
    }
}
 
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章