值类型和引用类型

一、概念

值类型:直接存储值,在栈上存储其值

注:值类型变量声明后,不管是否已经赋值,编译器为其分配内存

引用类型:存储对其值的引用,在栈上存储地址,在堆上存储值

注:引用类型当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间,当使用new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中。

二、区别

值类型和引用类型有何区别?

相同点:

引用类型可以实现接口,值类型当中的结构体也可以实现接口;

引用类型和值类型都继承自System.Object类;

不同点:

  1. 值类型实例通常时在线程栈上分配的(静态分配),但是在某些情形下可以存储在栈中

引用类型的对象总是在进程对方中分配(动态分配)

  1. 值类型在栈内分配空间大小因变量类型而异

引用类型在栈内的空间大小相同

  1. 将一个值类型变量赋值给领域给值类型变量时,将复制包含的值

引用类型变量的赋值只复制对对象的引用,而不复制对象本身

  1. 值类型不可能派生出新的类型:所有的值类型均隐士派生自System.ValueType
  2. 值类型不可能包含null值

三、构造函数在结构和类中的区别

类当中,默认有一个无参数的构造函数,当在类中写一个有参数的构造函数,默认无参的构造函数被取代。

类中写构造函数参数列表中参数个数可以不确定

    在结构中,默认有一个无参数的构造函数,当在类中写一个有参数的构造函数,默认的无参的构造函数还存在,没有被取代。

    在结构中写构造函数要把所有的字段都要完全赋值。

类属于引用类型,结构属于值类型。

四、堆和栈的区别

栈是编译期间就分配好的内存空间,因此代码中必须旧栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中

堆是程序运行期间动态分配的内存空间,可以根据程序的运行情况确定要分配的堆内存的大小。

五、.Net中哪些是值类型?哪些是引用类型?

值类型:

       基本数据类型:整型:int

                              长整形:long

                              浮点型:float(32位)double(64位)

                              字符型:char

                              布尔型:bool

       枚举类型:枚举:enum

       结构类型:结构:struct

引用类型:

       类:

              基类:System.Object

              字符串:string

              自定义类:class

       接口:interface

      数组:in[] , string[]

  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值