1. 程式人生 > >C#列舉 列舉和int以及string型別之間的轉換 結構 過載 全域性變數

C#列舉 列舉和int以及string型別之間的轉換 結構 過載 全域性變數

1 列舉

語法:

public enum 列舉名

{

    值1,

    值2,

    值3,

    ........

}

public:訪問修飾符。公開的公共的,哪都可以訪問。

enum:關鍵字,宣告列舉的關鍵字

將列舉宣告到名稱空間的下面,類的外面,表示這個名稱空間下,所有的類都可以使用這個列舉。

列舉就是一個變數型別 ,int--double  string  decimal.

只是列舉宣告、賦值、使用的方式跟那些普通的變數型別不一樣。

宣告:

public enum QQState
    {  OnLine,
        OffLine,
        Leave,
        Busy,
        QMe   //最後一個成員的逗號可加可不加
   }  

使用:
QQState state = QQState.OnLine;

2  列舉和int以及string型別之間的轉換

namespace _04列舉和int以及string型別之間的轉換
{
    public enum QQState
    {
        OnLine=1,  //不賦值的話,從0 開始
        OffLine,
        Leave,
        Busy,
        QMe
    }
   class Program
    {
        static void Main(string[] args)
        {
            //  列舉型別預設可以跟int型別互相轉換  列舉型別跟int型別是相容的 
	   //  1 將列舉型別強轉成int型別
            QQState state = QQState.OnLine;        
            int n = (int)state;
            Console.WriteLine(n);                                  //輸出1
            Console.WriteLine((int)QQState.OffLine);   //輸出2
            Console.WriteLine((int)QQState.Leave);  //輸出3
            Console.WriteLine((int)QQState.Busy);  //輸出4
            Console.WriteLine((int)QQState.QMe);  //輸出5
            Console.ReadKey();
          
           //2 將int型別強轉為列舉型別

            int n1 = 3;
            QQState state = (QQState)n1;
            Console.WriteLine(state);              //輸出Leave
            Console.ReadKey();    
      
            
          // 3 所有的型別都能夠轉換成string型別(呼叫ToString)
             int n1 = 10;
             double n1 = 3.14;
             decimal n1 = 5000m;
             string s = n1.ToString();
             Console.WriteLine(s);   //分別 輸出10/3.14/5000
             Console.ReadKey();

	 // 4將列舉型別轉換成字串型別
            QQState state = QQState.OnLine;
            string s = state.ToString();
            Console.WriteLine(s);     //輸出OnLine
            Console.ReadKey();

          //  5  將字串型別轉換為列舉型別	
	//如果轉換的字串是數字,在列舉QQState中沒有,則顯示數字8
	//如果轉換的字串是文字,在列舉QQState中沒有,則拋異常
	   string s = "1";  //  1
	   string s=“Online”  // 2
            string s = "ABCDEFG"; //3
	    string s = "8";  //  4
           
            //Convert.ToInt32()  int.parse()  int.TryParse()
            //呼叫Parse()方法的目的就是為了讓它幫助我們將一個字串轉換成對應的列舉型別
            //(要轉換的列舉型別)Enum.Parse(typeof(要轉換的列舉型別),"要轉換的字串");
            QQState state = (QQState)Enum.Parse(typeof(QQState), s);
            Console.WriteLine(state);
            Console.ReadKey();
           結果:1 和2 輸出 Online
                       3 拋異常 
		       4  輸出8
   
             // 6 列舉練習
            //提示使用者選擇一個線上狀態,我們接受,並將使用者的輸入轉換成列舉型別。
            //再次列印到控制檯中
            Console.WriteLine("請選擇您的qq線上狀態 1--OnLine 2--OffLine 3--Leave 4--Busy 5--QMe");
            string input = Console.ReadLine();
            switch (input)
            {
                case "1": QQState s1 = (QQState)Enum.Parse(typeof(QQState), input);
                    Console.WriteLine("您選擇的線上狀態是{0}",s1);
                    break;
                case "2": QQState s2 = (QQState)Enum.Parse(typeof(QQState), input);
                     Console.WriteLine("您選擇的線上狀態是{0}",s2);
                    break;
                case "3": QQState s3 = (QQState)Enum.Parse(typeof(QQState), input);
                     Console.WriteLine("您選擇的線上狀態是{0}",s3);
                    break;
                case "4": QQState s4 = (QQState)Enum.Parse(typeof(QQState), input);
                    Console.WriteLine("您選擇的線上狀態是{0}", s4);
                    break;
                case "5": QQState s5 = (QQState)Enum.Parse(typeof(QQState), input);
                    Console.WriteLine("您選擇的線上狀態是{0}", s5);
                    break;
            }
            Console.ReadKey();
        }
    }
}


3、結構

可以幫助我們一次性宣告多個不同型別的變數。

語法:

publicstruct   Person          // 結構名  
{
    public string _name;
    public string _age;
publicstring _gender;        成員;//欄位
}
     class Program
    {
        static void Main(string[] args)
        {
            // 定義一個結構型別Person,有三個成員,分別為姓名,性別,年齡 性別用列舉型別
            //宣告兩個Person型別的變數,分別表示張三 男  18歲/ 小蘭 女 16歲
            Person zsPerson;
           zsPerson._name = "張三";
           zsPerson._gender = Gender.男;
           zsPerson._age = 18;

            Person xlPerson;
           xlPerson._name = "小蘭";
           xlPerson._gender = Gender.女;
           xlPerson._age = 16;
            
            Console.WriteLine("我叫{0},我今年{1}歲了,我是{2}生",zsPerson._name,zsPerson._age,zsPerson._gender);
            Console.WriteLine("我叫{0},我今年{1}歲了,我是{2}生",xlPerson._name,xlPerson._age,xlPerson._gender);
            Console.ReadKey();
 
        }
    }
}

變數在程式執行期間只能儲存一個值,而欄位可以儲存多個值。

欄位在定義時要在前面加下劃線,以區別於變數

4  過載

概念:方法的過載指的就是方法的名稱相同給,但是引數不同。

引數不同,分為兩種情況

1)、如果引數的個數相同,那麼引數的型別就不能相同。

2)、如果引數的型別相同,那麼引數的個數就不能相同。

***方法的過載跟返回值沒有關係。

 public static void M(int n1, int n2)
        {
            int result = n1 + n2;
        }
 
        public static double M(double d1, double d2)
        {
            return d1 + d2;
        }
        public static void M(int n1, int n2, int n3)
        {
            int result = n1 + n2 + n3;
        }
        public static string M(string s1, string s2)
        {
            return s1 + s2;
        }
 
5 全域性變數

c#中沒有全域性變數的概念,可以通過類的靜態欄位或屬性來模擬C或C++中的全域性變數。

1)"全域性變數"的定義方法:

1

2

3

4

5

6

// MyVars類中定義兩個全域性變數

public class MyVars

{

    // Count是靜態欄位

    public static int Count;

  }

2)使用方法

1

2

3

4

5

6

7

8

9

10

11

12

13

class Program

{

    static void Main(string[] args)

    {

        // 賦值

        MyVars.Count = 100;

        ShowVars();

    }

    static void ShowVars()

    {

        // 顯示

        Console.WriteLine("MyVars.Count = {0}", MyVars.Count);

    }