首页 > 编程语言 >理解C#中装箱和拆箱是什么 有什么用

理解C#中装箱和拆箱是什么 有什么用

时间:2023-03-06 11:46:21浏览次数:55  
标签:拆箱 C# object int 引用 类型 装箱

前言

C# 是一种通用、面向对象的编程语言,由微软(Microsoft)开发的,属于强类型语言,变量需先声明数据类型、然后给变量赋初值,最后才能使用该变量。否者程序直接报错、提示。

一、c#数据类型

在c#中数据类型分为值类型、引用类型。

值类型有:int、double、bool、decimal、enum、struct等,数据存放在栈stack中。
引用类型有:string、数组、自定义类、object、接口等,数据存放在堆heap中,地址存放在栈stack中。

二、什么是装箱、拆箱

简单来说:封箱(boxing)是把值类型数据,转换为引用类型。拆箱(unboxing)是把引用类型数据,转换为值类型。通过装箱和拆箱操作,可以实现值类型与引用类型的互相转换,最终能够实现任何类型的值,可以按照对象进行处理。

程序中发生装箱和拆箱先决条件:

1. 发生类型转换。

2. 存在继承关系。

 

三、产生装箱、拆箱的举例

 

int  a= 1;//定义int型变量

 

object b; //定义object型变量

 

b= a; //将int型转成object型

 

// 根据里氏转换原则,可以把派生类赋值给基类

 

// 这里出现了装箱,额外耗费cpu和内存资源

 

Console.WriteLine("这是装箱,是将值类型,转换为引用类型");

 

a= (int)b; //将object型转成int型

//根据里氏转换原则,当基类中装的是派生类,可以强转

//这里出现了拆箱,额外耗费cpu和内存资源

Console.WriteLine("这是拆箱,是将引用类型,转换为值类型");

 

标签:拆箱,C#,object,int,引用,类型,装箱
From: https://www.cnblogs.com/wugu-ren/p/17183174.html

相关文章

  • 公司某资料子系统定期cpu过高的诊断
    背景公司里的某负责保存用户文档的子系统有时会忽然cpu很高,过了大约5分钟后又恢复正常水平。领导协调让我帮看一下(我心里是:不熟悉这个子系统里面的代码,我尽力哈......
  • CPU调速器schedutil原理分析
    1.CPU电源管理简介如果我们的能源是无限制的,那可能也不需要做现在这样复杂的电源管理控制,尤其是在嵌入式设备如手机上,在追求极致性能的同时,还要追求续航时间,二者是一对相......
  • document cookie
    cookieexpires最大不超过400天:https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis   ......
  • okhttp Interceptor
    Interceptor介绍okhttp的拦截器就是将整个请求网络的过程的每一步都封装在不同的Interceptor里,这样说可能有点绕,简单点说就是把一个List里的Interceptor都顺序执行一遍,那......
  • JDBC(重点)
    1.数据库驱动驱动:声卡、显卡、数据库我们的程序会通过数据库驱动,和数据库打交道2.JDBCSUN公司为了简化开发人员的(对数据库的统一)操作,提供了一个(Java操作数据库的)规范,俗......
  • C# Get 带body
    try{    //System.GC.Collect();    HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(URL);    request.Proxy= null;    request.Ke......
  • Cgroup学习笔记4—相关DEBUG
    一、相关DEBUG接口1.cat/proc/mounts|grepcgroup可以查看每个子系统挂载位置等信息#cat/proc/mounts|grepcgroupnone/dev/blkiocgrouprw,nosuid,nodev,n......
  • 第一章 C语言:数据存储
    一、大小端存储大端存储:数据的低位字节存储在高地址小端存储:数据的低位字节存储在低地址不同编译器有不同的存储方式inta=10;char*p=(char*)&a;printf(......
  • vue-cli-service
    是一个构建(build)编译vue项目的工具,提供了服务页面渲染的功能(serve)它的功能就是把vue源码编译为静态页面输出到dest指定的目录。通常是dist目录,build构建运行后输出到di......
  • C/C++课程设计题目[2023-03-06]
    C/C++课程设计题目[2023-03-06]课题1:公司考勤管理系统(一)、课程设计题目:某公司的考勤管理系统(二)、目的与要求:1、目的:(1)要求学生达到熟练掌握C++语言的基本知识和技能;(2......