首页 > 编程语言 >【C#之值类型vs引用类型】

【C#之值类型vs引用类型】

时间:2022-10-17 18:03:59浏览次数:46  
标签:变量 C# 定义 vs 内存 类型 之值 引用


前言

C#的数据类型分为两种,一种是值类型,一种是数据类型,从宏观上来看,感觉很重要的,并且很容易弄混,所以,这篇博客以值类型& 引用类型为主角,以对比的形式进行分析,并加以举例,下面咱们一起来走进他们的别具一格的世界。

分述

(一)栈和堆重温


值类型和引用类型的学习涉及到栈和堆的知识,在这里,咱们来回忆一下,什么是栈?什么是堆?详情请看之前的博客: 【C#之栈和堆初遇】


1.栈


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


2.堆


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


(二)值类型

1.定义


值类型:值存在栈上


2.类别


【C#之值类型vs引用类型】_类型变量



1.定义


引用类型 : 栈上存地址   堆上存值


2.类别


【C#之值类型vs引用类型】_对比_02


(四)对比

1.区别

A.导图先看


【C#之值类型vs引用类型】_引用类型_03


B.详细解说


· 将一个值类型变量赋给另一个值类型变量时,将复制包含的值


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


· 继承System.Value的类型都是值类型,其他的属于引用类型


· 值类型不可能派生出新的类型:所有的值类型均隐式派生自System.ValueType,值类型结构与引用类型相同的是,结构可以实现接口


· 值类型不可能包含null值,而引用类型可以


· 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值


C.存储


【C#之值类型vs引用类型】_类型变量_04

【C#之值类型vs引用类型】_值类型_05


D.适用


值类型:在内存管理方面具有更好的效率,适用于做存储数据的载体,但 不支持多态


        引用类型:支持多态,适用 于定义应用程序行为。


         


总结


知识在不断的学习过程中,对于值类型和引用类型,在以后的学习中,会有更深的理解,有不对的地方希望大家指正!

标签:变量,C#,定义,vs,内存,类型,之值,引用
From: https://blog.51cto.com/u_15586641/5763790

相关文章

  • 【单片机】8255A.B.C口输出方波
    【单片机】8255A.B.C口输出方波​​一、操作目的​​​​二、操作内容​​​​三、预备知识​​​​四、程序框图​​​​五、程序清单​​​​六、代码详解​​一、操作目......
  • 【LeetCode】268. 丢失的数字(C++)
    268.丢失的数字​​1题目描述​​​​2示例描述​​​​2.1示例1​​​​2.2示例2​​​​2.3示例3​​​​2.4示例4​​​​3解题提示​​​​4解题思路​​​​5......
  • 【LeetCode】485. 最大连续 1 的个数(C++)
    485.最大连续1的个数​​1题目描述​​​​2示例描述​​​​3解题提示​​​​4解题思路​​​​5源码详解(C++)​​1题目描述给定一个二进制数组,计算其中最大连续......
  • 【题解】CF11D A Simple Task(状压 DP)
    【题解】CF11DASimpleTask题目链接CF11DASimpleTask题意概述给定一张\(n\)个点\(m\)条边的无向图,无重边自环,点数不超过\(19\),求无向图中环的数量。思路分......
  • -bash: warning: setlocale: LC_CTYPE: cannot change locale (zh_CN.UTF-8)
    Linux服务端A:RedHatEnterpriseLinuxrelease8.Linux客户端B:Mint20当mint20去连接redhat8时是正常的,都没问题,但是ssh连到redhat8后要使用tab补齐时就会报错,报错如......
  • opencv读取rtsp流(python)
    使用opencv读取rtsp流方法,因其简单将不在解释:importcv2defread_rtsp():cap=cv2.VideoCapture('rtsp://admin:[email protected]:554')fourcc=cv......
  • 【LeetCode】面试题 16.17. 连续数列(C++)
    面试题16.17.连续数列​​1题目描述​​​​2示例描述​​​​3解题思路​​​​4源码详解(C++)​​1题目描述给定一个整数数组,找出总和最大的连续数列,并返回总和。2......
  • python学习记录:爬取起点小说信息保存到excel爬虫源码
     importxlwtimportrequestsfromlxmlimportetreeimporttimeimportxlsxwriterheaders={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537......
  • 【C#学习之辨析小总结】
    前言:学习C#段时间了,现在回顾,和当初学习的时候真的不一样了,更多的是需要我们在实践中去运用,今天,我们来总结C#中一些容易混淆的知识点。核心:(一)识别变量名在程序中,变量......
  • ARC151C 01 Game
    ARC151C01Game前言赛时机房大佬们以及标算都用SG函数做的,而我用的是最朴素的大力分类讨论,wa了十二发才过,写下这篇题解记录我的想法,纪念一下这场比赛。题目简意\(......