using System; namespace struct_enum { /// <枚舉類型enum> /// enum: 值類型 /// 1.數據直接存儲在棧中 /// 2.默認枚舉中的第一個變量被賦值為0,其他的變量的值按定義的順序來遞增(0,1,2,3,4...) /// 3.enum枚舉類型的變量的名字不能相同,但是值可以相同, /// 4.如果enum中的部分成員顯式定義了值,那麼沒有定義值的成員還是會按照上一個成員的值來遞增賦值. /// 5.enum枚舉成員可以用來作為位標志,同時支持位的操作(位與,位或等等) /// enum CardDeckSettings : uint /// { /// SingleDeck = 0x01, //Bit 0 /// LargePictures = 0x02, //Bit 1 /// FancyNumbers = 0x04, //Bit 2 /// Animation = 0x08 //Bit 3 /// } /// </枚舉類型enum> public enum Gender { 男, 女 } //===================================================================================== /// <struct> /// struct: 值類型(類是引用類型) /// 1.直接繼承自【System.ValueType】(繼承自【System.Object】),不需要顯示的指定; /// 2.結構可以聲明構造函數,但它們必須帶參數;不能包含顯式的無參數構造函數, /// 3.與類不同,結構的實例化可以不使用【new】運算符。; /// 4.結構的繼承列表中只允許有接口,結構可以實現接口,一個結構不能從另一個結構或類繼承,而且不能作為一個類的基; /// 5.結構在定義變量時不能給定初始值; /// </struct> public struct Person { public string strName; public int nBirthday; public Gender gender; } public struct Person2 { // 構造函數: 必須帶參數 且必須加上【:this()】 public Person2(string name, Gender gd, int nBd) : this() { strName = name; nBirthday = nBd; gender = gd; } public string strName { get; private set; } public int nBirthday { get; private set;} public Gender gender { get; private set; } public void fnTestPerson2(Person2 ps2) { Console.Write("\n測試 Person2: "); Console.WriteLine("姓名: {0} , {1}, {2}", ps2.strName, ps2.gender, ps2.nBirthday); Console.WriteLine("\n---------------------------------------"); } } public struct Person3 { // 姓名 private string name; public string strName { get // 獲取私有成員name的值 { return this.name; } set // 給私有成員name賦值 { this.name = value; // this代表person3的實例化對象 } } // 年齡 //private int age; // 私有 public int nAge // 對外公開 { get; // 簡寫,相當於: get { return this.birthday; } set; // 簡寫,相當於: set { return this.birthday = value; } } // 性別 //private Gender gender; public Gender GENDER { get; set; } public void fnTestPerson3(string strName, Gender gender, int nAge) { Console.Write("\n測試 Person3: "); Console.WriteLine("姓名: {0} , {1}, {2}", strName, gender, nAge); } } class Program { static void Main(string[] args) { // 測試Person fnTestPerson(); // 測試Person2 Person2 person2 = new Person2("小麗", Gender.女, DateTime.Now.Year - new DateTime(1980, 01, 06).Year); person2.fnTestPerson2(person2); // 測試Person3 Person3 person3 = new Person3(); person3.strName = "小王"; // 通過set訪問器給私有成員name賦值,通過get訪問器獲取name的值 person3.GENDER = Gender.男; person3.nAge = 35; person3.fnTestPerson3(person3.strName, person3.GENDER, person3.nAge); Console.ReadLine(); } // 測試Person public static void fnTestPerson() { Person person; person.strName = "小明"; // 對其成員賦值 person.gender = Gender.男; person.nBirthday = DateTime.Now.Year - new DateTime(2010, 08, 09).Year; Console.Write("\n測試 Person: "); Console.WriteLine("姓名: {0} , {1}, {2}", person.strName, person.gender, person.nBirthday); Console.WriteLine("\n---------------------------------------"); } } }