C#基础之结构
参考:http://www.cnblogs.com/kissdodog/archive/2013/05/11/3072832.html
C# 结构体 struct 的基本知识 - double64 - 博客园 (cnblogs.com)
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; } }
struct的构造函数,必须是有参数的,不能是无参数的
struct有参数构造函数必须为所有属性赋值
人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。