c#中关于值类型和引用类型的个人理解

xuzy-x xuzy-x     2022-12-23     716

关键词:

值类型,除了最终继承自Object,还继承自ValueType

值类型继承ValueType,ValueType继承Object。(c#中所有的类型都最终继承自Object)

 

创建引用类型时,runtime会为其分配两个空间,一块空间分配在堆上,存储引用类型本身的数据,另一个块空间分配在栈上,存储对堆上数据的引用(实际上存储的堆上的内存地址,也就是指针)。

创建值类型时, runtime会为其分配一个空间,这个空间分配在变量创建的地方,如:

      如果值类型是在方法内部创建,则跟随方法入栈,分配到上存储。

      如果值类型是引用类型的成员变量,则跟随引用类型,存储在上。

 

值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的

 

值类型存取速度快,引用类型存取速度慢。

 

值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用

 

栈的内存分配是自动释放;而堆在.NET中会有GC来释放       

 

值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中

 

如:int是值类型,string是引用类型,引用类型指向的是堆中的位置

c#中关于协变性和逆变性(又叫抗变)详解

  今天回忆了之前看的《深入理解C#》这本书中的泛型章节,其中对泛型的可变性的理解。泛型可变性分两种:协变和逆变。逆变也又称为抗变。 怎么理解这两个名词的意思:  ①:协变即为在泛型接口类型中使用out标识... 查看详情

c#值传递引用传递

...以为引用类型,在作为参数传递时,都是引用传递(类似于值传递中的ref),也就是说,把引用类型的变量作为参数传递给方法,在方法中修改该参数,会改变这个变量的值,后来通过一些事例发现,上面的认识是片面的,引用... 查看详情

c#几种类型转换方法的个人总结

...可以为null的数据。二、(int)形式的转换主要是根据数据的类型来判断能否转换,值类型只能转换为值类型(结构体除外,Object和dynamic也除外,),引用类型只能转换为引用类型(子类型可以转换为父类型,不能转换为其他不相干的类,... 查看详情

c#基础:理解装箱与拆箱(代码片段)

...;精致码农•2021.08.27前面我们讲到.NET平台支持的两大数据类型:值类型和引用类型。值类型比引用类型更高效,因为它没有指针引用,不用分配在托管堆中,也不用被GC回收。但有时候你可能偶尔需要将一种类型... 查看详情

[019]c#基础:理解装箱与拆箱(代码片段)

...;精致码农•2021.08.27前面我们讲到.NET平台支持的两大数据类型:值类型和引用类型。值类型比引用类型更高效,因为它没有指针引用,不用分配在托管堆中,也不用被GC回收。但有时候你可能偶尔需要将一种类型... 查看详情

引用类型的变量

引用类型的变量理解如下:  变量类型分为两类,基本类型和引用类型  基本类型如intshortbyte等8种基本类型  引用类型的变量,是将一个类名作为数据类型定义了一个变量  这样做的目的个人理解是,引用了该类的变... 查看详情

c#数据类型

C#的数据类型可以分为3类:数值类型,引用类型,指针类型。指针类型仅在不安全代码中使用。   值类型包括简单类型(如字符型,浮点型和整数型等),集合类型和结构型。引用类型包括类类型,接口类型,代表类型和... 查看详情

c#中的引用类型和值类型有啥区别?

】c#中的引用类型和值类型有啥区别?【英文标题】:Whatisthedifferencebetweenareferencetypeandvaluetypeinc#?c#中的引用类型和值类型有什么区别?【发布时间】:2011-06-3017:54:30【问题描述】:几个月前有人问过我这个问题,我无法详细解... 查看详情

C#中的引用类型和引用有啥区别? [复制]

】C#中的引用类型和引用有啥区别?[复制]【英文标题】:WhatisthedifferencebetweenReferencetypeandrefinC#?[duplicate]C#中的引用类型和引用有什么区别?[复制]【发布时间】:2017-05-2204:18:09【问题描述】:在ref类型和Referencetype中,我都可以... 查看详情

C# 中的线程、值类型和引用类型说明?

】C#中的线程、值类型和引用类型说明?【英文标题】:ThreadinginC#,valuetypesandreferencetypesclarification?【发布时间】:2012-11-2019:22:03【问题描述】:在阅读了来自msdn的JonSkeetarticle和this文章后,我还有一个问题假设我有这个代码:MyPe... 查看详情

c#类型基础值类型和引用类型

...复制(DeepCopy),浅度复制和深度复制又是以如何复制引用类型成员来划分的。由此又引出了引用类型和值类型,以及相关的对象判等、装箱、拆箱等基础知识。索性从最基础的类型开 查看详情

包含值类型和字符串的 C# 通用约束

...2【问题描述】:我正在尝试在IEnumerable上编写一个仅适用于值类型和字符串的扩展方法。publicstaticstringMyMethod<T>(thisIEnumerable<T>source)whereT:st 查看详情

值类型和引用类型只是 c# 概念?

】值类型和引用类型只是c#概念?【英文标题】:valuetypesandrefferencetypesarejustc#concepts?【发布时间】:2015-10-1808:39:32【问题描述】:有人可以解释一下,值类型和引用类型只是c#.net概念还是它确实适用于其他各种语言,如c、c++、ja... 查看详情

c#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

一:值类型和引用类型的含义参考前一篇文章  C#学习笔记(基础知识回顾)之值类型和引用类型  1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型。如果int只不过是栈上的一个4字节的值,该... 查看详情

进入快速通道的委托(深入理解c#)

...一个方法组。2.协变性和逆变性:协变性指的是——泛型类型参数可以从一个派生类隐式转化为基类。逆变性指的是——泛型类型参数可以从一个基类隐式转化为派生类。注意事项:1.只有接口和委托支持协变和逆变(如Fun<outT... 查看详情

[c#]值类型和引用类型(代码片段)

值类型和引用类型什么是值类型,什么是引用类型什么是值类型,什么是引用类型概念:值类型直接存储其值,而引用类型存储对其值的引用。部署:托管堆上部署了所有引用类型。引用类型:基类为Objcet... 查看详情

值类型和引用类型深入理解

...原始数据的克隆,但在学习深拷贝和浅拷贝时又发现与值类型和引用类型有着千丝万缕的联系。回想好久都没有温习基础,于是就整理了值类型和引用类型的随笔,本文内容比较基础,对于想继续深入研究的同学可以查看IL更深... 查看详情

c#夯实基础之字符串

  string作为我们在编程当中用的最多的数据类型,同时又由于它的特殊性,怎么强调它的重要性都不为过,理解string的一些类型和存储机制,有助于我们写出正确且高效的代码.一.string类型  1.string的类型   stri... 查看详情