在2.2.1我们对C#的基本数据类型有了基本了解。C#将数据类型分为:值类型、引用类型和指针类型。

通用类型系统支持两种一般类别的类型,每一类都细分成子类别:

q        值类型:值类型直接包含它们的数据,值类型的实例要么在堆栈上,要么内联在结构中。值类型可以是内联的(由运行库实现)、用户定义的或枚举的。有关内联值类型的列表,请参见 .NET Framework 类库。

q        引用类型:引用类型存储对值的内存地址的引用,位于堆上。引用类型可以是自描述类型、指针类型或接口类型。引用类型的类型可以由自描述类型的值来确定。自描述类型进一步细分成数组和类类型。类类型是用户定义的类、装箱的值类型和委托。

以下表格就是对通用类型系统的一个分类汇总

数据类型分类表及关键字

值类型

枚举

Enum

内置类型

结构

整数:sbyte、byte、char、short、ushort、int、uint、long、ulong

浮点:float、double

高精度:decimal

布尔:bool

无类型:void

引用

类型

根对象:object

字符串:string

类:class

委托:delegate

接口:interface

数组:Array

指针类

表:数据类型分类表及关键字

大多数编程语言提供内置的数据类型(比如整数和浮点数),这些数据类型会在作为参数传递时被复制(即,它们通过值来传递)。在 .NET Framework 中,这些称为值类型。运行库支持两种值类型:

q        内置值类型:.NET Framework 定义了内置值类型(例如int、float、double、bool等),它们对应于编程语言使用的基元数据类型并与之相同。

q        用户定义的值类型:派生自 System.ValueType 或 System..Enum 的您自己的值类型。

引用类型的变量又称为对象,可存储对实际数据的引用。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。所有的简单类型(C# 语言的组成部分)均为 .NET Framework 系统类型的别名。例如,int 是 System.Int32 的别名。

Code
static void Main(string[] args)
{      
    System.Console.WriteLine("byte:{0}<--->{1}", byte.MinValue, byte.MaxValue); //0 .. 255                                                        
    System.Console.WriteLine("sbyte:{0}<--->{1}", sbyte.MinValue, sbyte.MaxValue); //-128 .. 127                                                      
    System.Console.WriteLine("short:{0}<--->{1}", short.MinValue, short.MaxValue);  //-32,768 .. 32,767                                                   
    System.Console.WriteLine("ushort:{0}<--->{1}", ushort.MinValue, ushort.MaxValue);//0 .. 65,535                                                        
    System.Console.WriteLine("int:{0}<--->{1}", int.MinValue, int.MaxValue);//-2,147,483,648 .. 2,147,483,647                                             
    System.Console.WriteLine("uint:{0}<--->{1}", uint.MinValue, uint.MaxValue); //0 .. 4,294,967,295                                                      
    System.Console.WriteLine("long:{0}<--->{1}", long.MinValue, long.MaxValue); //9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807                  
    System.Console.WriteLine("ulong:{0}<--->{1}", ulong.MinValue, ulong.MaxValue); //0 .. 18,446,744,073,709,551,615                                      
    System.Console.WriteLine("float:{0}<--->{1}", float.MinValue, float.MaxValue);//-3.402823e38 .. 3.402823e38                                           
    System.Console.WriteLine("double:{0}<--->{1}", double.MinValue, double.MaxValue); //-1.79769313486232e308 .. 1.79769313486232e308                     
    System.Console.WriteLine("decimal:{0}<--->{1}", decimal.MinValue, decimal.MaxValue);//-79228162514264337593543950335 .. 79228162514264337593543950335
}

C#提供了多种数值类型的数据:整型、浮点和高精度。提供这些不同的数据类型的原因是,不同的数据类型的容量是预定的。你可以把数据类型想象为一个个不同规格的盒子,每种规格的盒子的容量都是有限的。可以使用以下代码观察到不同数据类型的容量:

在声明数值类型变量的时候,你需要估算下,你需要的最大、最小数值分别是多少,正确的选择数据类型。无符号的数据类型在通常情况下我们不去使用,如果你需要存储的数据是整型,笔者建议你优先考虑使用int,如果你需要存储的是浮点类型,笔者建议你优先考虑使用double。

转载于:https://www.cnblogs.com/shyleoking/archive/2009/06/21/1507613.html

值类型和引用类型和数据大小排名相关推荐

  1. 第2篇 C#数据类型-值类型与引用类型

    一 C#内存分配 在应用程序与操作系统之间有一个"中间人"--公共语言运行时(Common Language Runtime,CLR).它为应用程序提供内`存管理,线程管理和远程处 ...

  2. 值类型与引用类型数据运算

    值类型与引用类型数据运算 ​ 值类型的数据和引用类型的数据进行运算的时候,会遵循如下步骤: 1.调用引用类型数据的valueOf方法,获取返回值,尝试和值类型的数据进行运算,如果可以计算,就得出结果. ...

  3. 栈和托管堆/值类型和引用类型/强制类型转换/装箱和拆箱[C#]

    一.栈和托管堆 通用类型系统(CTS)区分两种基本类型:值类型和引用类型.它们之间的根本区别在于它们在内存中的存储方式..NET使用两种不同的物理内存块来存储数据-栈和托管堆.如下图所示:     值 ...

  4. 值类型和引用类型在栈和堆中的分配

      类型基础及背后的工作原理   数据在内存中的分配与传递    值类型和引用类型它们在内存分配与传递上的区别 内存分配 首先要了解一下内存中栈和堆的概念.     栈(Stack) ##栈是一种先进 ...

  5. string:值类型?引用类型?[转]

    string是一种很特殊的数据类型,它既是基元类型又是引用类型,在编译以及运行时,.Net都对它做了一些优化工作,正式这些优化工作有时会迷惑编程人员,使string看起来难以琢磨,这篇文章分上下两章, ...

  6. 由c#的值类型与引用类型说开去

    之前一直被灌输,C#分值类型和引用类型,在程序运行时,它们分别存在栈(Stack) 和堆(Heap)上.这也是面试经典问题了,但其实其中存在很大的误解.比如某个实例对象中有一个Int型成员.当这个实例 ...

  7. 转:图解C#的值类型,引用类型,栈,堆,ref,out

    C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解.还有托管堆,栈,ref,out等等概念也是每个C#程序员都会接触到的概念,也是C#程序员面试经常考到的知识,随便搜搜 ...

  8. [你必须知道的.NET]第九回:品味类型---值类型与引用类型(中)-规则无边

    发布日期:2007.5.28 作者:Anytao ©2007 Anytao.com ,原创作品,转贴请注明作者和出处. 接上回[第八回:品味类型---值类型与引用类型(上)-内存有理]的探讨,继续我们 ...

  9. C#中值类型和引用类型

    C#中值类型和引用类型 http://www.cnblogs.com/123clb/archive/2011/03/03/1969712.html 概念: 1.值类型:数据存储在内存的堆栈中,从堆栈中 ...

  10. 第八回:品味类型---值类型与引用类型(上)-内存有理

    第八回:品味类型---值类型与引用类型(上)-内存有理 http://www.cnblogs.com/anytao/archive/2007/05/23/must_net_08.html 发布日期:2 ...

最新文章

  1. java签名算法阻止 设置_java数字签名算法之RSA
  2. NOI2011 道路修建
  3. python爬虫图片-Python图片爬取方法总结
  4. 使用Python增加csdn的访问量
  5. sublime ctags的安装使用方法
  6. C# 调用 *.sql 文件
  7. 【重难点】【事务 03】分布式事务
  8. 将coco数据集格式转变成voc数据格式
  9. 读《Computer Systems: A Programmer’s Perspective》
  10. centos6.5 install cobbler
  11. hive jdbc连接时的乱码问题
  12. R语言 AHP层次分析法——如何验证矩阵一致性
  13. 萧红二不二?人是在最日常的生活中流逝的……你窗边革命洪流过去的时候,可能你正在剥一颗鸡蛋
  14. raspberrypi
  15. HTTP(S) 路由器 fabio
  16. python英文单词整理
  17. 滑动轨迹 曲线 python_python——自动轨迹绘制
  18. MySQL 数据(字段)类型
  19. 一文彻底搞懂ROC曲线与AUC的概念
  20. 边际效用递减规律,真用起来,还挺多坑

热门文章

  1. ORB:新一代 Linux 应用
  2. [00011]-[2015-08-26]-[00]-[Windows 程序设计 ---MFC 截屏---BMP格式 ---JPG格式]
  3. C#获取程序所在的目录
  4. Winfrom 线程实现 http、https 文件下载 显示下载进度详情
  5. 公交车刮擦 两名驾驶员丢下乘客下车“开战”
  6. iOS 提交app到iTunes Connect,显示构建版本“+”号的小技巧/ 选择版本提交 无“+”号 问题/Xcode 上传成功但iTunes 不显示上传的版本的问题
  7. Shell脚本查询进程存活信息
  8. pt-archiver数据归档
  9. python学习-实现用户密码登录,输错三次锁定
  10. [struts2学习笔记] 第五节 编写struts2的action代码