閱讀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方法
TRY IT中示範如何設計出第一個DictionaryAddresses程式