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---------------------------------------");
}
}
}
