[讀書筆記 ]Stephens' C# Programming with Visual Studio 2010 24-Hour Trainer 第十七章

  • 978
  • 0

閱讀Stephens' C#教材第十七章筆記

 

Chapter 17 Using Enumerations and Structures.
 
列舉(Enumeration)讓您自行定義一組可以指派給變數的具名整數常數。
例如:
enum MealType { Breakfast, Lanch, Dinner };
 
預設列舉中第一個項目對應的值為0,後面的項目依序加1,如果有指定,則以指定的值為主。
 
例如以下的程式中,None被指定為-1,雖然在第一個位置,其值就不是0
 
        // Define contact methods.
        private enum ContactMethod
        {
            None = -1,
            Email = 0,
            Phone = 1,
            SnailMail = 2,
        }
 
結構(Structure)讓您自行定義一群需要共同運作的資料成為一個變數,結構中也可以包含列舉型別的資料。
例如:
 
        // Define an address structure.
        private struct Address
        {
            public string Name;
            public string Street;
            public string City;
            public string State;
            public string Zip;
            public string Email;
            public string Phone;
            public ContactMethod PreferredMethod;
        }
 
第一個DictionaryAddresses程式示範使用列舉與結構進行地址資料的操作,注意在ComboBox中的資料順序,必須與列舉中的順序一樣(None, Email, Phone, SnailMail)。
 
本章簡單比較Structure與Class的差別,詳細資料可參閱微軟網站
相同處:都有屬性、方法及事件,能有Constructor,詳細的討論留到23章
差異處:Structure是實值型別(vaule type),Class則是參考型別(reference type),前者可以直接指派數值,後者則需要一個New的動作。
 
StructureVersusClass程式就示範兩者操作上的不同
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace StructureVersusClass
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // Define a structure.
        struct Person
        {
            public string FirstName;
            public string LastName;
        }

        // Define a class.
        class Student
        {
            public string FirstName;
            public string LastName;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Create a Person.
            Person ann;
            ann.FirstName = "Ann";
            ann.LastName = "Archer";

            // Set a second Person equal to the first.
            Person ben = ann;

            // Change Ben's first name.
            ben.FirstName = "Ben";

            // Display the two Persons' names.
            Console.WriteLine(ann.FirstName + " " + ann.LastName);
            Console.WriteLine(ben.FirstName + " " + ben.LastName);

            // Create a Student.
            Student cindy = new Student();
            cindy.FirstName = "Cindy";
            cindy.LastName = "Carstead";

            // Set a second Person equal to the first.
            Student dan = cindy;

            // Change dan's first name.
            dan.FirstName = "Dan";

            // Display the two Persons' names.
            Console.WriteLine(cindy.FirstName + " " + cindy.LastName);
            Console.WriteLine(dan.FirstName + " " + dan.LastName);
        }
    }
}
 
第二個DictionaryAddresses程式示範使用列舉的Remove方法
 
第三個DictionaryAddresses程式也示範列舉與結構的結合使用
 
TRY IT中示範如何設計出第一個DictionaryAddresses程式