欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

深入探讨C#中的结构struct

时间:2022-10-20 10:14:59|栏目:.NET代码|点击:

一、结构和类的区别

1、结构的级别和类一致,写在命名空间下面,可以定义字段、属性、方法、构造方法也可以通过关键字new创建对象。

2、结构中的字段不能赋初始值。

3、无参数的构造函数无论如何C#编译器都会自动生成,所以不能为结构定义一个无参构造函数。

4、在构造函数中,必须给结构体的所有字段赋值。

5、在构造函数中,为属性赋值,不认为是对字段赋值,因为属性不一定是去操作字段。

6、结构是值类型,在传递结构变量的时候,会将结构对象里的每一个字段复制一份拷贝到新的结构变量的字段中。

7、不能定义自动属性,因为字段属性会生成一个字段,而这个字段必须要求在构造函数中,但我们不知道这个字段叫什么名字。

8、声明结构体对象,可以不使用new关键字,但是这个时候,结构体对象的字段没有初始值,因为没有调用构造函数,构造函数中必须为字段赋值,所以,通过new关键字创建结构体对象,这个对象的字段就有默认值。

9、栈的访问速度快,但空间小,堆的访问速度慢,但空间大,当我们要表示一个轻量级的对象的时候,就定义为结构,以提高速度,根据传至的影响来选择,希望传引用,则定义为类,传拷贝,则定义为结构。

二、Demo

复制代码 代码如下:

struct Point
    {
        public Program p;
        private int x;

        public int X
        {
            get { return x; }
            set { x = value; }
        }
        private int y;

        public int Y
        {
            get { return y; }
            set { y = value; }
        }
        public void Show()
        {
            Console.Write("X={0},Y={1}", this.X, this.Y);
        }
        public Point(int x,int y)
        {
            this.x = x;
            this.y = y;
            this.p = null;
        }
        public Point(int x)
        {
            this.x = x;
            this.y = 11;
            this.p = null;
        }
        public Point(int x, int y, Program p)
        {
            this.x = x;
            this.y = y;
            this.p = p;
        }
    }
    class Program
    {
        public string Name { get; set; }
        static void Main(string[] args)
        {
            //Point p = new Point();
            //p.X = 120;
            //p.Y = 100;
            //Point p1 = p;
            //p1.X = 190;
            //Console.WriteLine(p.X);

            //Point p;
            //p.X = 12;//不赋值就会报错
            //Console.WriteLine(p.X);
            //Point p1 = new Point();
            //Console.WriteLine(p1.X);//此处不赋值不会报错,原因见区别8

            Program p = new Program() { Name="小花"};
            Point point1 = new Point(10, 10, p);
            Point point2 = point1;
            point2.p.Name = "小明";
            Console.WriteLine(point1.p.Name);//结果为小明,分析见下图
        }
    }

上一篇:图文介绍c#封装方法

栏    目:.NET代码

下一篇:ASP.NET Core中的环境配置

本文标题:深入探讨C#中的结构struct

本文地址:http://www.codeinn.net/misctech/216812.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有