zoukankan      html  css  js  c++  java
  • C#数据类型(二)

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


     

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

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


     

    值类型的数据类型全部继承自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类、结构体可以继承接口。

  • 相关阅读:
    [译]Chapter 3 Understanding Controllers
    Effiective C# Item1 : 使用属性代替成员变量
    终于出版了
    《Thinking in UML》读书笔记之一
    【译】ClickOnce部署概述
    [译]Chapter 2 Building a Simple ASP.NET MVC Application
    开始翻译《Application Architecture Guide 2.0》
    [译]Chapter 1 An Introduction to ASP.NET MVC(1)
    [译]Chapter 1 An Introduction to ASP.NET MVC(3)
    Effective C# Item4:使用Conditional特性代替#if条件编译
  • 原文地址:https://www.cnblogs.com/jincwfly/p/731183.html
Copyright © 2011-2022 走看看