1. 程式人生 > >C#每日一課(十五)

C#每日一課(十五)

C# 結構體(Struct)

結構是值型別資料結構。它使得一個單一變數可以儲存各種資料型別的相關資料。struct關鍵字用於建立結構。

為了定義一個結構,必須使用struct語句。struct語句為程式定義了一個帶多個成員的新資料型別。

比如,定義一個圖書Books的結構體可以如下進行:

struct Books

{

public string title;

public string author;

public string subject;

public long book_id;

};

使用Visual Studio新建C#控制檯應用程式Chapter10_001

在專案中新增如下程式碼:

//定義一個Books結構

    struct Books

    {

        public string title;

        public string author;

        public string subject;

        public long book_id;

    };



    class Program

    {

        static void Main(string[] args)

        {

            //宣告Book型別陣列

            Books[] books = new Books[2];

            //初始化books陣列中的值

            books[0].title = "ESSENTIAL C#6.0";

            books[0].author = "Mark Michaelis Eric Lippert";

            books[0].subject = "C#";

            books[0].book_id = 100001;



            books[1].title = "C++ Primer Plus Sixth Edition";

            books[1].author = "Stephen Prata";

            books[1].subject = "C++";

            books[1].book_id = 100002;



            //在控制檯輸出資訊

            foreach (Books b in books)

            {

                Console.WriteLine("Book Title:{0}",b.title);

                Console.WriteLine("Book Author:{0}", b.author);

                Console.WriteLine("Book Subject:{0}",b.subject);

                Console.WriteLine("Book Id:{0}",b.book_id);

                Console.WriteLine("------------------------------");

            }



            Console.ReadKey();

        }

    }

編譯執行後結果如下:

C#結構的特點:

  1. 結構可以帶有方法、欄位、索引、屬性、運算子方法和事件
  2. 結構可以定義建構函式,但是不可以定義解構函式。注意是不可以定義預設建構函式的,預設的建構函式是自動定義且不可以修改的
  3. 與類不同,結構不能繼承其它結構或類
  4. 結構不可以作為其它結構或類的基礎結構
  5. 結構可以實現一個或多個介面
  6. 結構成員不可以指定為abstract、virtual、protected
  7. 當使用new操作符建立一個結構物件時,會呼叫適當的建構函式來建立結構,與類不同,結構可以不用new操作符即可被例項化
  8. 如果不使用new操作符,只有在所有欄位都被初始化後,欄位才被賦值,物件才被使用

 

從上面可以看出類與結構主要的不同點如下:

類是引用型別,結構是值型別

結構不支援繼承

結構不能宣告預設的建構函式

 

在結構體中新增方法如下:

public void Display()

        {

            Console.WriteLine("Book Title:{0}", title);

            Console.WriteLine("Book Author:{0}", author);

            Console.WriteLine("Book Subject:{0}", subject);

            Console.WriteLine("Book Id:{0}", book_id);

    }

在Main方法中新增如下程式碼:

//呼叫結構中方法顯示相關資訊

    Console.WriteLine("呼叫結構中方法顯示相關資訊:");

    foreach (Books b in books)

    {

        b.Display();

        Console.WriteLine("------------------------------");

}

編譯執行後的結果如下:

 

C#列舉(Enum)

列舉是一組命名整型常量。它是使用enum關鍵字宣告的。

C#列舉是值資料型別。也就是說列舉包含自己的值,並且是不可以繼承的。

 

宣告emum變數語法:

enum <enum_name>

{

enumeration list

};

enum_name指定列舉的名稱

enumeration list是一個用逗號分隔的識別符號列表

如:

enum Days {Sun,Mon,Tue,Wed,Thu,Fri,Sat};

在程式中新增一個列舉變數

//宣告一個列舉變數

enum Days { Sun,Mon,Tue,Wed,Thu,Fri,Sat};

在Main方法中新增如下程式碼:

//列舉的使用

    int WeekdayStart = (int)Days.Mon;

    int WeekdayEnd = (int)Days.Fri;

    Console.WriteLine("WeekdayStart-Monday:{0}", WeekdayStart);

Console.WriteLine("WeekdayEnd-Friday:{0}", WeekdayEnd);

編譯執行後的結果如下: