C#引用类型和值类型的适用场合和区别

作者:Mogul1 时间:2022-10-20 03:37:25 

1.值类型

值类型包括:数值类型,结构体,bool型,用户定义的结构体,枚举,可空类型。

值类型的变量直接存储数据,分配在托管栈中。变量会在创建它们的方法返回时自动释放。

所有的值类型都是密封(seal)的,所以无法派生出新的值类型。

2.引用类型

引用类型包括:数组,用户定义的类、接口、委托,object,字符串,null类型,类。

引用类型的变量持有的是数据的引用,数据存储在数据堆,分配在托管堆中,变量并不会在创建它们的方法结束时释放内存,它们所占用的内存会被CLR中的垃圾回收机制释放。 

CLR常用简写词语,CLR是公共语言运行库(Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间必要的分离。

3.值类型与引用类型区别:

C#引用类型和值类型的适用场合和区别

4.适用场合:

值类型在内存管理方面具有更好的效率,并且不支持多态,适合用做存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。

引用类型可以派生出新的类型,而值类型不能,因为所有的值类型都是密封的。

引用类型可包含null值,值类型不能(可空类型功能允许将null赋给值类型,如int a=null);

引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值

5.装箱和拆箱

1)装箱就是将一个值类型转换成等值的引用类型

在堆上为新生成的对象(该对象包含数据,对象本身没有名称)分配内存。

将堆栈上值类型变量的值拷贝到堆上的对象中。

将堆上创建的对象的地址返回给引用类型变量(从程序员角度看,这个变量的名称就好像堆上对象的名称一样)。

2)拆箱就是将一个引用类型转换成等值的值类型

将引用类型变量堆上的值拷贝到栈上面。

来源:https://blog.csdn.net/Mogul1/article/details/81191566

标签:c#,引用类型,值类型
0
投稿

猜你喜欢

  • 详谈异步log4j2中的location信息打印问题

    2023-12-22 05:53:31
  • 详解Spring 中 Bean 对象的存储和取出

    2023-08-06 02:42:46
  • C#对DataTable中的某列进行分组

    2021-12-10 23:06:45
  • SpringBoot使用jsr303校验的实现

    2022-04-21 04:02:39
  • C#数据结构与算法揭秘三 链表

    2022-04-17 03:22:38
  • Android自定义View软键盘实现搜索

    2022-02-10 07:22:45
  • Java接口幂等性设计原理解析

    2022-12-22 12:27:01
  • C# 获取客户端IPv4地址的示例代码

    2022-09-12 12:39:34
  • C# 9.0新特性——只初始化设置器

    2023-03-19 02:31:45
  • Java List分页功能实现代码实例

    2022-06-02 13:56:14
  • Android线程间通信Handler源码详解

    2021-12-31 07:04:10
  • 多线程(多窗口卖票实例讲解)

    2021-09-02 02:47:26
  • C#结束进程及子进程

    2021-06-22 15:18:10
  • C语言文件操作之fread函数详解

    2023-07-06 18:24:15
  • c# WPF实现Windows资源管理器(附源码)

    2022-10-01 14:34:46
  • Java使用HttpClient实现Post请求实例

    2022-05-22 08:37:43
  • java实现倒序读取文件功能示例分享

    2023-07-12 09:23:54
  • SpringBoot读取资源目录中JSON文件的方法实例

    2023-04-26 02:00:42
  • Java SpringBoot实现带界面的代码生成器详解

    2023-09-28 11:54:14
  • 29个要点帮你完成java代码优化

    2022-11-06 05:16:26
  • asp之家 软件编程 m.aspxhome.com