C#中的值类型是什么
这篇文章主要介绍“C#中的值类型是什么”,在日常操作中,相信很多人在C#中的值类型是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#中的值类型是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
创新互联公司-专业网站定制、快速模板网站建设、高性价比房山网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式房山网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖房山地区。费用合理售后完善,十年实体公司更值得信赖。
在C#中,相信大家对于 "值类型" 并不陌生,因为它在我们代码设计中是不可缺少的,那么究竟什么是 "值类型" 呢 "值类型" 就是 我们用到的 Int16,Int32这些数值类型吗
我们知道在C#中所有的类型继承于System.Object根类型,这也就意味着就代码层面来讲,在C#中所有的类型都是Class,即一切都是Class类型,既然全部都是Class类型,那么值类型在哪里呢我们可以发现在C#中System.Int16,System.Int32,System.Boolean...等等这些常用的类型都是 Struct 结构类型,那么结构类型是什么,下面我们定义一个结构,然后通过IL Disassemble 工具来查看编译的中间代码便可以得到结果.
public struct CustomerStruct { public string Name { get; set; } }
代码非常简单,我们就定义一个struct类型,并且包含一个Name属性.
看到上面这幅图,相信大家都已经看到定义一个struct类型实际上编译把你所定义的类型继承了System.ValueType类型,换句话说,在C# 中我们经常使用的System.Int16,System.Int32,System.Boolean..这些数值结构类型都是继承于 System.ValueType类型,而System.ValueType又是继承于System.Object根类型,即验证我开始所讲到的在C#中一切类型都是Class。
之所以存在"值类型" 这个概念,其实是因为C#中的某些类型有这特殊的地位(即继承于System.ValueType的类型),CLR会特殊的对待这些类型
首先为什么对于数值类型也可以使用 new 来进行内存分配呢 上面已经讲到,因为他们都是Class类型,当然可以使用new 来进行内存分配.
其次,CLR执行这样的代码的时,CLR 通过反射(有待考察)或者其他途径来获知所要请求分配内存的类型是否继承于System.ValueType如果是的话,那么就在栈上进行分配,如果不是的话,那么就是我们所说的引用类型,就在托管堆上分配内存以及栈上分配对应的引用变量,这些一切都是CLR做的工作.
到此,关于“C#中的值类型是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
分享标题:C#中的值类型是什么
标题来源:http://ybzwz.com/article/ispecd.html