您现在的位置是:首页 > 前端 > UnityUnity

struct和class之间的区别

Tdou2022-03-13【Unity】人已围观

简介在C#中,struct和class都是用户定义的数据类型,struct和class有许多不同之处,但主要的区别是:Class是引用类型,它保存在堆上并且能够被垃圾回收;然而stuct是值类型,它保存在栈上或者

在C#中,struct和class都是用户定义的数据类型,struct和class有许多不同之处,但主要的区别是:
Class是引用类型,它保存在堆上并且能够被垃圾回收;然而stuct是值类型,它保存在栈上或者内嵌在它的包含类型之中。因此,从
总体上来说struct比class节省内存。
下图是Class和Struct的14个不同之处:




 

详解Class与Stuct的不同之处

1.struct用"struct"关键字来声明,而class用"class"关键字声明(好像是废话)
2.由于struct是值类型,所以struct的变量直接包含了数据本身;而class是引用类型,所以class的变量只是包含了对数据的引用(其
实就是一个指针)
3.class类型的变量,其内存分配在堆上并且能够被垃圾回收,然而stuct类型的变量的内存分配在栈上或者内嵌在它的包含类型中
4.class的对象需要通过"new"关键字来创建,而创建struct的对象时,可以用也可以不用"new"关键字。如何实例化struct时没有
用"new", 则用户不允许访问其方法、事件和属性。
5.每个struct变量都包含它的数据的一个copy(ref和out参数是个例外),所以对一个变量的修改不会影响别的变量;然则对于class来
说,所有变量(通过赋值声明的变量)都指向同一对象,对一个变量的修改会影响别的变量。
通过正面的例子可以加深理解
using System;

namespace structAndClass
{ //creating structure
    public struct Demo
    {
        public int x, y; //parameterized constructor

        public Demo(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
    }

    public class StructDemo
    {
        public static void Main(string[] args)
        {
            Demo a = new Demo(50, 50);
            Demo b = a; a.x = 100;
            Console.WriteLine("Value of a.x = " + a.x);
            Console.WriteLine("Value of b.x = " + b.x);
        }
    }
}
输出 
Value of a.x = 100
Value of b.x = 50


 
using System;

namespace structAndClass
{
    public class Demo
    {
        public int x, y; public Demo(int x, int y)
        {
            this.x = x; this.y = y;
        }
    }

    public class StructDemo
    {
        public static void Main(string[] args)
        {
            Demo a = new Demo(50, 50); Demo
                b = a; a.x = 100; Console.WriteLine("Value of a.x = " + a.x); Console.WriteLine(
                "Value of b.x = " + b.x);
        }
    }
}
输出
Value of a.x = 100
Value of b.x = 100
    
6.struct比class节省内存
7.struct不能有无参数构造函数,可以有有参数的或者static构造函数;而class默认会有一个无参数的构造函数
8.struct不能有析构函数,而class可以有
9.struct不能从另一个struct或者class继承而来,也不能作为基类使用;而class可以继承自其他class,也可以作为基类使用。总
之,stuct不支持继承,class支持继承。
10.struct的成员不能声明成abstract, virtual或者protected, 而class可以
11.class的实例称为对象(object), struct的实例称为结构变量
12.如果未指定访问指示符,对class而言,其成员默认是private,而对struct而言,默认是public
13.class通常用于复杂的数据结构的场景,而struct通常用于小数据场景数据场景

Tags:面试   Unity技术点

很赞哦! ()

  • 微信收款码
  • 支付宝收款码
打赏

文章评论

站点信息

  • 建站时间:2019-12-11
  • 网站程序:帝国CMS7.5
  • 主题模板《今夕何夕》
  • 文章统计83篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们