C#中的结构(结构体)

结构 是可以包含数据成员和函数成员的数据结构,这一点和类一样;下面我们讲一下结构与类不同的地方:

1. 结构体是值类型,无需进行堆分配,类是引用类型
2. 结构类型的变量直接存储数据结构,而类类型的变量存储对动态分配的对象的引用
3. 类支持继承,结构体不支持继承
4. 关键字简单说下,类是Class,结构体是Struct

下面我们通过代码片段来具体看一下结构体:

    /// <summary>
    /// Point类
    /// </summary>
    public class Point
    {
        public int x, y;
        public Point(int x,int y)
        {
            this. x=x;
            this. y=y;
        }
    }
    /// <summary>
    /// 结构体Point
    /// </summary>
    public struct Point
    {
        public int x, y;
        public Point(int x,int y)
        {
            this. x=x;
            this. y=y;
        }
    }

借助类,两个变量可以引用同一个对象,因此,对一个变量执行的运算可以会影响到另一个变量的引用。
借助结构体,每个变量都有自己的数据副本,因此,对一个变量执行的运算不会影响到两一个变量。
下面我们在看一下分别调用类Point和结构Point,输出的结果有什么不同:

    public class PointExample
    {
        public static void Main ( )
        {
            Point a = new Point ( 10 , 10 );// Point的类型是Class
            Point b = a;
            a. x=20;
            Console. WriteLine ( b. x );//OutPuts "20"

    }
   public class PointExample
    {
        public static void Main ( )
        {
            Point a = new Point ( 10 , 10 );//Point的类型是Struct
            Point b = a;
            a. x=20;
            Console. WriteLine ( b. x );//OutPuts   "10"
        }

    }

通过这个代码片段可以看出来,如果Point是类,则输出20,因为a和b引用同一对象。
如果Point是结构,则输出10,因为将a赋值给b创建了新的副本,因此副本不受后面a.x的赋值的影响

总结一下吧:首先,复制整个结构通常比复制对象引用效率更低,因此通过结构进行的赋值和值参数传递可能比引用类型的成本更高。
其次,除in、ref和out参数以外,无法创建对结构的引用,这就表示在很多场景中都不能使用结构。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值