参考: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
}
}
}