參考:http://www.cnblogs.com/kissdodog/archive/2013/05/11/3072832.html namespace 結構{ //結構是值類型,在棧中分配空間;棧中保存的只是引用。直接包含它自己的數據,每個結構都保存自己的一份數據,修改每一個結構的數據都不會對其 ...
參考:http://www.cnblogs.com/kissdodog/archive/2013/05/11/3072832.html
namespace 結構
{
//結構是值類型,在棧中分配空間;棧中保存的只是引用。直接包含它自己的數據,每個結構都保存自己的一份數據,修改每一個結構的數據都不會對其他結構的數據造成影響。
//類是引用類型,在堆中分配空間;兩個對象指向的是同一個地址(堆空間),修改的值會影響原來的值。
//棧:由編譯器自動分配,釋放。在函數體定義的變數通常在棧中
//堆:一般由程式員分配釋放,用New,Melloc分配得到的就是在堆上
public struct Person
{
public string _name;//欄位 一定要註意細節就是前面的下劃線,用於與變數的區別
public int _age;
public Gender _Gender;
}
public enum Gender
{
男,女
}
class Program
{
static void Main(string[] args)
{
//由於結構不是引用類型,因此結構類型的變數不能被賦予null值。
Person Person;
Person._name = "張三";
Person._age = 18;
Person._Gender = Gender.男;
Person P;
P._name = "大黃";
P._age = 12;
P._Gender = Gender.女;
Console.WriteLine("我叫{0}, 我今年 {1}歲了,我是{2}孩子", Person._name,Person._age,Person._Gender);
Console.WriteLine("我叫{0}, 我今年 {1}歲了,我是{2}孩子", P._name,P._age,P._Gender);
Console.ReadKey();
#region 例子
//PersonStruct p1, p2; //與類一樣,但可以不new
//p1.Name = "張飛";
//p1.MobilePhone = "13553663108";
//p1.Birthday = DateTime.Now.AddYears(-10);
//p2 = p1; //將p1的值賦給p2 //由於是值類型,因此賦值等於將全部值全部複製到p2的棧空間
//p2.Name = "關羽"; //然後修改p2的值看是否會影響p1
//Console.WriteLine(p1.Name); //輸出 張飛 沒影響
//PersonClass p3 = new PersonClass();
//p3.Name = "張飛";
//p3.MobilePhone = "13553663108";
//p3.Birthday = DateTime.Now.AddYears(-10);
//PersonClass p4 = new PersonClass();
//p4 = p3; //將p3的值賦給p4 賦值後,由於是引用類型,因此兩個對象指向的是同一個地址(堆空間)
//p4.Name = "關羽"; //然後修改p4的值看是否會影響p3
//Console.WriteLine(p3.Name); //輸出 關羽 有影響
//Console.ReadKey();
#endregion
}
}
}
==================================
結構的構造函數要傳參
namespace 結構Test
{
class Program
{
static void Main(string[] args)
{
Person p;
p.Age = 12;
p.Name = "李四";
Console.WriteLine("姓名{0} 年齡:{1}",p.Name,p.Age);
Console.ReadKey();
}
}
public struct Person
{
public Person(string name)
{
//每個 struct 均已有一個將對象初始化為零的預設構造函數。因此,可以為結構創建的構造函數必須帶有一個或多個參數。
Name = "11";
Age = 12;
}
public int Age;
public string Name;
}
}