C#中的数据类型(1)

news/2024/7/5 2:38:58
C#中的数据类型(1)
C#中的数据类型(1)


C#中的数据可以分为两大类:值类型(Value Type)和引用类型(Reference Type)。

r_Datatype.pic2.jpg

值类型的对象,继承自System.ValueType类(此类的对象却是引用类型的),内容直接储存在栈上(以及MSDN中提到的“或在结构中以内联方式分配的”——“or allocated inline in a structure”);引用类型的对象,其内容存储于堆上,栈上的相应变量名下只存储该处的堆地址,长度为4字节/32位(32位操作系统)或者8字节/64位(64位操作系统)。

值类型的对象不能为null。不能从已有的值类型派生新的数据类型。

r_datatype1.pic1.jpg

值类型的数据类型全部继承自System.ValueType类,它们又分为以下几类:

C#系统自定义了13种值类型的数据类型:
整数9种:
byte, short, int, long
sbite, ushort, uint, ulong
char


值范围

系统名称

属于CLS

占用内存长度

byte

028-1(128)

System.Byte

Yes

1字节/8

sbyte

-2727-1

System.SByte

No

1字节/8

ushort

0216-1(65535)

System.UInt16

No

2字节/16

short

-215215-1

System.Int16

Yes

2字节/16

char

\0000\ffff

System.Char

Yes

2字节/16

uint

0232-1(4.29×109)

System.UInt32

No

4字节/32

int

-231231-1

System.Int32

Yes

4字节/32

ulong

0264-1(1.84×1019)

System.UInt64

No

8字节/64

long

-263263-1

System.Int64

Yes

8字节/64


系统默认整数为int型,某些类型赋值时需要做显式声明,否则会在隐式类型转换时发生溢出错误


浮点数3种:
float, double, decimal


值范围

系统名称

属于CLS

精度

占用内存长度

float

±1.5×10-45±3.4×1038

System.Single

Yes

7

4字节/32

double

±5.0×10-324±1.7×10308

System.Double

Yes

1516

8字节/64

decimal

±1.0×10-28±7.9×1028

System.Decimal

Yes

2829

16字节/128


系统默认浮点数为double型,某些类型需要做显式声明,否则会在隐式类型转换时发生溢出错误或者丢失精度。从MSDN可以看出,与double和float相比较,decimal类型的精度较高,而可表示的数值范围较小,其数据成员和方法也有很大的不同,这也是为什么MSDN中将decimal单独列出,而不包含在Floating-Point Types Table中的原因。


逻辑1种:
bool

可能的取值为true和false,占用内存长度1字节/8位。C#中不再有类似于“零等于flase,非零int值等于true”的变换。bool型的系统名称为System.Boolean,属于CLS。



其他2种:
enum 枚举

枚举的数据类型的声明如下:

[属性(attributes)] [访问标识(modifiers)] enum 名称(identifier) [:基类型(base-type)] {枚举列表(enumerator-list)} [;]


枚举类型的本意有两点:

一是将难以记忆的整型数常量(除char外的8种整型数都可以)标记为更好理解的变量名,类似于将颜色的色谱表#0000FF定义为blue(这个比喻很不恰当,仅做为参考)。二是引入强类型,在需要采用整形数常量表示的变量之间建立屏障。虽然每个字符串代表了一个整形数常量,但是具体使用枚举类数据类型的整型数常量时仍需要强制类型转换。这个整数值在C#默认是int型的。

枚举列表中各个变量的赋值默认是从0开始,递加1的。
例如:

声明:
enum days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
Sun代表int值1
(int)days.Sun的值是1

声明:
enum days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
Sun代表int值2
(int)days.Sun的值是2


struct

结构体struct类是用户自定义的值类型数据类型。

结构体本身没有继承这一特点,因此与继承相关的一切(例如抽象方法)结构体均不具备,除了两点:所有的结构体继承自System.Object类、结构体可以继承接口。

posted on 2006-01-12 10:44 Hi, I am a newbie. 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/giogio/archive/2006/01/12/datatype01.html


http://www.niftyadmin.cn/n/2868289.html

相关文章

电商发展迅速 消费者享便利- 从网购演变 看大数据运用

“没抢上”、“付不了款”、“折后价比折前还高”……许多人忙着吐槽“双十一”时,“38分钟28秒天猫交易额已突破100亿”。  “双十一”的消费数字无疑再次聚焦世人目光。的确,从整个中国网购的演变上看,电子商务呈逐年上升趋势&#xff0c…

10063---java多线程总结五:线程池的原理及实现

原文 1、线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在…

卡方检验的自由度

为什么80%的码农都做不了架构师?>>> 自由度:取值不受限制的变量的个数。 如何理解这句简单的话呢?给定一组数据,我们来计算不同的统计量,看看自由度的变化。这些数据分别为 1 2 4 6 8. 5个数。 先来求平均…

大数据里挖掘大商机

“身处阿里巴巴总部的数据直播中心,仿佛来到航天基地观摩火箭发射。”一位参加过现场报道的媒体同行曾向记者这样描述。 作为最受消费者关注的年度盛事之一,11月10日至11日,来自海内外的460多家媒体守候在阿里巴巴西溪园区,捕捉着…

10065---【Java多线程】线程池的工作原理详解(上)

原文 为什么使用线程池 线程池为线程生命周期开销问题和资源不足问题提供了解决方案,因为线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池对线程进行统一分配、调优和监…

使用vue-meta进行mate动态管理HTML head信息

vue-meta的官方文档在这里。文档中比较详细地说明了在浏览器端和服务器端如何使用 vue-meta 修改页面头部信息,这里我主要介绍下在SPA项目中管理meta info的使用方法。, vue单页运用中,对单独页面使用meta的时候,他不是直接修改&a…

大数据会带来越来越细的标准

我们经常谈大数据,什么是大数据呢?大数据首先它体积非常大,有各种各样的数据,另外还有非常复杂,还包括数据传输的速度。在2000年的时候,我们的因特网的大小规模大概21Tb,用现在的技术&#xff0…

10066--- java线程:互斥锁与读写锁

原文 两种互斥锁机制: 1、synchronized 2、ReentrantLock ReentrantLock是jdk5的新特性,采用ReentrantLock可以完全替代替换synchronized传统的锁机制,而且采用ReentrantLock的方式更加面向对象,也更加灵活,网上有很多…