知识大全 浅谈C#中所谓的 “值类型”
Posted 类型
篇首语:三十年河东,三十年河西,莫欺少年穷。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 浅谈C#中所谓的 “值类型”相关的知识,希望对你有一定的参考价值。
浅谈C#中所谓的 “值类型” 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在C#中 相信大家对于 值类型 并不陌生 因为它在我们代码设计中是不可缺少的 那么究竟什么是 值类型 呢? 值类型 就是 我们用到的 Int Int 这些数值类型吗?
我们知道在C#中所有的类型继承于System Object根类型 这也就意味着就代码层面来讲 在C#中所有的类型都是Class 即一切都是Class类型 既然全部都是Class类型 那么值类型在哪里呢?我们可以发现在C#中System Int System Int System Boolean 等等这些常用的类型都是Struct 结构类型 那么结构类型是什么 下面我们定义一个结构 然后通过IL Disassemble 工具来查看编译的中间代码便可以得到结果
public struct CustomerStruct
public string Nameget;set;
代码非常简单 我们就定义一个struct类型 并且包含一个Name属性
看到上面这幅图 相信大家都已经看到定义一个struct类型实际上编译把你所定义的类型继承了System ValueType类型 换句话说 在C#中我们经常使用的System Int System Int System Boolean 这些数值结构类型都是继承于System ValueType类型 而System ValueType又是继承于System Object根类型 即验证我开始所讲到的在C#中一切类型都是Class
之所以存在 值类型 这个概念 其实是因为C#中的某些类型有这特殊的地位(即继承于System ValueType的类型) CLR会特殊的对待这些类型
看下面这 行代码
Int a = new System Int ( ) ;
CustomerStruct customer = new CustomerStruct() ;
首先为什么对于数值类型也可以使用 new 来进行内存分配呢? 上面已经讲到 因为他们都是Class类型 当然可以使用new 来进行内存分配
其次 CLR执行这样的代码的时 CLR 通过反射(有待考察)或者其他途径来获知所要请求分配内存的类型是否继承于System ValueType如果是的话 那么就在栈上进行分配 如果不是的话 那么就是我们所说的引用类型 就在托管堆上分配内存以及栈上分配对应的引用变量 这些一切都是CLR做的工作
我们再来看看装箱操作
object o = new object();
Int aaa = ;
o = aaa; //这里会发生装箱操作
我们都知道当CLR执行到 o = aaa;这条语句时会发生装箱操作 为什么会发生装箱操作呢?这是因为CLR 知道引用变量o所要引用的类型aaa是继承于System ValueType类型的 继承于System ValueType的类型都是在栈上分配的 而其它则是在托管堆上分配的 所以会CLR会弄得aaa的副本弄到托管堆上去 这一切也都是CLR的工作
由此我们可以得出结论:
在C#中 就代码层面上讲 所有的类型都是Class类型
所谓的 值类型 != 数值类型 而是所有继承于System ValueType 的类型
值类型 得到的语言级别的支持 CLR知道如何对 值类型 这样的Class类型进行内存分配和处理
cha138/Article/program/net/201311/12889相关参考
PHP与C#的值类型指向区别 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! PH和C#的值拷贝区
使用值类型的ToString方法 在连接字符串时经常使用+号直接将数字添加到字符串中这种方法虽然简单也可以得到正确结果但是由于涉及到不同的数据类型数字需要通过装箱操作转化为引用类型才可以添加到字
浅谈C#闭包的相关原理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 首先想说明一点虽然有这样那
浅谈C#随机数发生器 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我们在做能自动生成试卷的考试
C#中有两种基本数据类型值类型和引用类型值类型包括简单类型结构类型枚举类型引用类型包括Object类型类类型接口代表元字符串类型数组 说白了这篇就是扩展intstringdoubleDate
前面扯过一篇浅谈面向对象与女娲造人今儿我接着扯…… 在我的理解中所谓的异常机制也就是让程序在出现某些错误的情况下还能继续执行完如同两个人在恋爱虽然出现各种问题但还是希望将来能继续走下去 在ja
何为脱硝?所谓脱硝,指的是除去烟气中的NOx,NOx主要是NO和NO2组成,而NO含量占90%以上。要除去烟气中的NO和NO2,就必须研究NO和NO2的性质。NO是一种惰性氧化物,它虽然溶于水,但不能
何为脱硝?所谓脱硝,指的是除去烟气中的NOx,NOx主要是NO和NO2组成,而NO含量占90%以上。要除去烟气中的NO和NO2,就必须研究NO和NO2的性质。NO是一种惰性氧化物,它虽然溶于水,但不能
何为脱硝?所谓脱硝,指的是除去烟气中的NOx,NOx主要是NO和NO2组成,而NO含量占90%以上。要除去烟气中的NO和NO2,就必须研究NO和NO2的性质。NO是一种惰性氧化物,它虽然溶于水,但不能
妇科疾病常与寒冷有关,所谓寒邪,寒者,冷也。自然界中具有寒冷、凝结的外邪,称为寒邪。寒是冬季主气,在气温低的冬季,人体不注意防寒保暖,就常容易感受寒邪。此外,淋雨涉水,汗出受风以及贪凉露宿,或过饮寒凉