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有参数构造函数必须为所有属性赋值





posted @ 2017-09-26 15:13  ProZkb  阅读(355)  评论(0编辑  收藏  举报