C#中值类型和引用类型的差别浅记
C#中值类型和引用类型的差别浅记
int x = 2;
值类型变量x。在内存中的某处直接存储了它自身的值:2。
引用类型的变量存储的是对其对象的引用。更进一步说,就是引用类型变量在内存中直接存储了一个指向它处的引用。而引用所指的对象则保存在引用类型变量所指的内存中。如代码所看到的。
public class Thing
{
int x;
}
Thing x = newThing();
引用类型变量x,在对它进行声明时。会在内存中的某处分配一块空间存储它自身的内容,而我们所使用的变量x,实际上则是一个指向了它自身内容的引用。
注意。稍后我们会说到,引用类型的变量,它自身的内容总是保存在堆中。而值类型的变量,它自身的值总是分配在声明它的地方(可能在栈中,也可能在堆中)。
那么。C#中的值类型与引用类型,都有哪些差别呢,让我们来列举一下。
1、由于值类型变量存储的就是它自身的值。所以它总是包括一个值。不能为空。而引用类型变量存储的是一个指向它处的引用,所以能够为空(null),表示不包括值,即没有指向内存中的不论什么地方。
2、引用类型直接继承自System.Object类,与此不同。值类型直接继承自System.ValueType类,而System.ValueType类直接继承自System.Object类。作为全部类型的基类,System.Object类提供了一组方法,这些方法在全部类型中都能找到,如ToString方法等。System.ValueType类继承了System.Object类,它并没有加入不论什么新成员,而仅仅是覆盖了所继承的一些方法。使其更适合于值类型。注意,我们能够使用Type.IsValueType属性来推断一个类型是否为值类型,如代码所看到的
Thing x = new Thing();
if( x.GetType().IsValueType ) {
// Todo Something
}
3、引用类型对象和值类型对象。它们在内存中的存储分配规则不同。
引用类型对象总是分配在堆中;而值类型对象总是分配在它被声明的地方:若值类型对象作为字段被声明。那么它将尾随其所属的对象被分配;若值类型对象作为局部变量被声明,那么它将存储在栈上。如代码所看到的。
public class Thing
{
int x; // x作为字段,x为值类型,尾随引用类型的对象被分配,位于堆上
}
Thing x = new Thing();
int x = 2;// x作为局部变量,x为值类型,位于栈上
4、全部的值类型都是密封的(seal)。无法派生出新类型,而引用类型则能够继续派生。这也是值类型更适合于数据存储,而引用类型更适合于定义行为的原因。
最后。把C#中值类型与引用类型的划分所有列举一下:
|
作为值类型的数据类型 |
bool byte char decimal double float int long short sbyte uint ulong ushort enum struct |
|
作为引用类型的数据类型 |
class object string interface delegate |
好了,关于C#中值类型与引用类型的差别临时就记录这么多。兴许若有补充还会继续完好。
C#中值类型和引用类型的差别浅记的更多相关文章
- JavaScript中值类型和引用类型的区别
JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和布尔值.此外,JavaScript中还有两个特殊的原始值:null和undefined,它们既不是数字也不 ...
- JAVA中值类型和引用类型的不同(面试常考)
转载:https://www.cnblogs.com/1ming/p/5227944.html 1. JAVA中值类型和引用类型的不同? [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个 ...
- C#中值类型和引用类型图解
举几个值类型和引用类型的内存配置: 值类型存储在栈中,引用类型堆里: 1,数组 数组是引用类型,但是数组的元素可以是值类型或引用类型 2. 结构 结构是值类型,简略的看个例子 struct sampl ...
- C#中值类型和引用类型
本文将介绍C#类型系统中的值类型和引用类型,以及两者之间的一些区别.同时,还会介绍一下装箱和拆箱操作. 值类型和引用类型 首先,我们看看在C#中哪些类型是值类型,哪些类型是引用类型. 值类型: 基础数 ...
- java中值类型和引用类型的区别
[定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变. 值类型表示复制一个当前变量传给方法,当你 ...
- JavaScript中值类型与引用类型
JavaScript中的变量类型有哪些? 值类型:字符串(string).数值(number).布尔值(boolean).null.undefined 引用类型:对象(Object).数组(Array ...
- .net中值类型、引用类型理解的c#代码示例
下面是以前在公司的时候给别人讲解值类型.引用类型时创建的c#代码示例,从实际使用时的角度出发,对于初学者还是很有帮助的.这里并没有深入讲解值类型包含引用类型成员时(如struct)在内存中的存放情况等 ...
- JS中值类型和引用类型
一.值类型 例子: var a=10; var b=a; a=20; console.log(b); 例子中,将a的值赋给了b,b=10,然后改变a的值不会影响b的值,a和b是独立的两份,互不影响. ...
- C#中值类型与引用类型通俗理解
关于值类型和引用类型已经有很多人写了很多文章,但是很多人也只是停留在字面上的理解,如果采用一种通俗的方法来解释,想必很多人都会理解.我们都知道值类型存储在栈上,引用类型存储在堆上,引用类型都是xxx类 ...
随机推荐
- [LUOGU]1141 01迷宫
题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...
- URL链接后面的参数解析,与decode编码解码;页面刷新回到顶部jquery
function request() { var urlStr = location.search; ) { theRequest = []; return; } urlStr = urlStr.su ...
- 【java】 field 和 variable 区别及相关术语解释
Having said that, the remainder of this tutorial uses the following general guidelines when discussi ...
- 浅谈Session与Cookie的关系
一.概念理解: 首先cookie是服务端识别客户的唯一标识的依据,客户在访问网站时候,服务端为了记住这个客户,会在服务端按照它的规则制作一个cookie数据,会将这个cookie数据保留在服务端一段时 ...
- Python数据分析库之pandas,你该这么学!No.1
写这个系列背后的故事 咦,面试系列的把基础部分都写完啦,哈哈答,接下来要弄啥嘞~ pandas吧 外国人开发的 翻译成汉语叫 熊猫 厉害厉害,很接地气 一个基于numpy的库 干啥的? 做数据分析用的 ...
- PAT Basic 1014
1014 福尔摩斯的约会 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm” ...
- BRVAH(让RecyclerView变得更高效)(1)
本文来自网易云社区 作者:吴思博 对于RecyclerView, 我们重复编写着那一个又一个的列表界面,有的要分组,有的要添加广告头部.有的要不同类型item排列.等等需求,主要代码有大部分是重复的, ...
- linux下查看进程(ps命令)
转自:http://www.jb51.net/LINUXjishu/151851.html Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命 ...
- 如何使用百度地图API
一.申请密钥 1.先用eclipse创建一个Android工程 2.在百度api官网上申请一个密钥,链接:http://lbsyun.baidu.com/apiconsole/key 二.工程配置 1 ...
- VBA Split()函数
Split()函数返回一个数组,其中包含基于分隔符分割的特定数量的值. 语法 Split(expression[,delimiter[,count[,compare]]]) 参数说明 Expressi ...