介绍C#中的值类型

开发 后端
本文介绍C#中的值类型,它在我们代码设计中是不可缺少的,那么究竟什么是 "值类型" 呢 "值类型" 就是 我们用到的 Int16,Int32这些数值类型吗

在C#中,相信大家对于 "值类型" 并不陌生,因为它在我们代码设计中是不可缺少的,那么究竟什么是 "值类型" 呢 "值类型" 就是 我们用到的 Int16,Int32这些数值类型吗

我们知道在C#中所有的类型继承于System.Object根类型,这也就意味着就代码层面来讲,在C#中所有的类型都是Class,即一切都是Class类型,既然全部都是Class类型,那么值类型在哪里呢我们可以发现在C#中System.Int16,System.Int32,System.Boolean...等等这些常用的类型都是 Struct 结构类型,那么结构类型是什么,下面我们定义一个结构,然后通过IL Disassemble 工具来查看编译的中间代码便可以得到结果.

  1. public struct CustomerStruct  
  2. {  
  3. public string Name { get; set; }  

代码非常简单,我们就定义一个struct类型,并且包含一个Name属性.

struct类型

看到上面这幅图,相信大家都已经看到定义一个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做的工作.

【编辑推荐】

  1. 浅谈C#中构造函数和成员函数
  2. C#函数的参数返回结构数组
  3. 概述ASP.NET中的NGWS Runtime
  4. C#函数与JavaScript函数
  5. 详解C# Object.Equals函数
责任编辑:佚名 来源: cnblogs
相关推荐

2009-10-22 18:41:49

CLR VIA C#教

2009-08-31 14:34:46

C#值类型C#结构类型

2009-08-27 10:19:22

C#匿名类型

2009-08-14 17:04:50

C#类型系统

2009-08-03 17:51:43

C#引用类型

2009-08-18 17:17:05

C#局部类型

2009-08-19 16:39:44

C#值类型C#引用类型

2009-08-26 14:05:19

C#值类型和引用类型

2011-06-08 13:03:52

C#值类型引用类型

2009-09-04 10:16:30

C#数据类型

2009-09-07 10:48:53

C#数据类型

2011-06-08 13:35:18

C#数据类型

2009-08-25 17:52:01

C#可空值类型

2009-08-24 13:52:04

C# 泛型约束

2013-05-23 17:21:16

C#

2009-09-11 12:00:33

C#预定义数据类型

2011-07-14 11:08:30

C#继承

2011-03-30 08:27:48

C#

2011-06-08 13:50:39

C#类型转换

2009-08-12 18:35:36

C# ArrayLis
点赞
收藏

51CTO技术栈公众号