C#:结构体 struct关键字用来定义结构体 只读结构体 readonly:关键字代表构造之后就不能更改了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _2.结构体
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //访问Booksp1
            Books b1;
            b1.title = "西游记";
            b1.anthor = "吴承恩";
            b1.subject = "神话故事";
            b1.book_id = 1;
            Console.WriteLine(b1);


            //上面的b1没有实例化,结构体也支持实例化
            Point p1= new Point(10,20);
            Console.WriteLine(p1);

            /*
                栈:值类型的数据在栈中
                堆:引用类型的数据放到堆中
           与类的区别:

            1.结构体属于值类型,所以默认内存在栈中,而类创建的对象属于引用类型,默认的内存在堆中
             
            2.结构体的赋值是按照值的方式传递的,对象是按照引用类型传递的

            3.系统默认的构造函数,在结构体中不能重写 而类可以

            4.结构体不能继承其他类结构体,但是可以继承接口

            使用场景:
                1.如果是定义一本书,因为书只会有属性,没有行为,属于小数据结构,适用于结构体,因为赋值操作开销小
                2.如果要定义一个人,那么除了属性之外,还会有行为,属于复杂数据结构,适用于类,因为传递时候开销小
                */

            //只读结构体
            Point2 point2 = new Point2(10,20);
            Console.WriteLine(point2);
            //point2.X = 10;不可以再次赋值
            

            //关于结构体的默认值
            //结构体使用default会把当前结构体中的所有字段初始化为0
            Point p3= default(Point);
            Console.WriteLine(p3);

            //类使用default,表示没有任何对象,返回null
            People aPople=default(People);
            Console.WriteLine(aPople);
        }
    }
    //struct关键字用来定义结构体,属于值类型,主要的用途是封装数据,类似于类,但是只能表示简单的数据结构,例如,书本信息,坐标点,日期,时间等.
    public struct Books
    {
        public string title;
        public string subject;
        public string anthor;
        public int book_id;

        public override string ToString()
        {
            return $"书名:{title},作者:{anthor},类型:{subject},数量:{book_id}";
        }
    }

    public struct Point
    {
        public int X;
        public int Y;
        public Point(int x, int y)
        {
            X = x;
            Y = y;
        }
        //重写ToString
        public override string ToString()
        {
            return $"(坐标:{X},{Y})";
        }
    }

    //只读结构体
    //readonly:关键字代表构造之后就不能更改了
    public readonly struct Point2
    {
        public int X { get; }
        public int Y { get; }
        public Point2(int x, int y)
        {
            X = x;
            Y = y;
        }
        //重写ToString
        public override string ToString()
        {
            return $"(坐标:{X},{Y})";
        }
    }

}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _2.结构体
{
    internal class People
    {
        public string title;

        public override string ToString()
        {
            return "嘿嘿嘿嘿";
        }
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值