c# - 数据类型 - 值类型

作者: ichengzi | 来源:发表于2015-01-24 19:04 被阅读128次

    c#支持两种基本数据类型:值类型引用类型

    • 值类型的变量的值存储到Stack(桟)上
    • 引用类型的变量包含的是一个引用,引用本身存储在stack(桟)上,但此引用指向heap(堆)上的一个对象。
    • c#支持两种值类型:枚举enum)和结构struct

    Enum

    • 使用?修饰符可以新建一个可空的数据枚举变量,eg:
    enum Season { Spring, Summer, Fall, Winter}
    Season? currentSeason = null; 
    
    • eunm中每一个文字常量都有一个整数索引值(默认是int类型)与其对应,且默认是ZeroIndex(从0递增),但可以通过给一个文字常量赋一个整数,更改其索引值enum Season { Spring, Summer = 2, Fall, Winter}。可以对一个枚举常量做基本的整数运算,++,--,+,-等。若计算后的整数值有其对应的文字常量,则输出文字常量;否则输出整数值
    • enum Season : long { Spring, Summer, Fall, Winter} 则会把整数索引值的类型更改为Long类型,其他支持的类型包括:byte, sbyte, short, ushort, int, uint, long, ulong共8种。
    • enum Season { Spring, Summer, Fall = Autumn, Winter} 则会把Autumn和Fall的索引值设为一样。

    Struct

    • c#中有大量大结构体:
    关键字 等价类型 类型
    bool system.Boolean 结构体
    byte system.Byte 结构体
    string system.String
    object system.Object

    同样,decimal,double,float,int,long,short,ushort,uint,ulong都是结构体。

    • 可以为自己定义的结构体声明构造函数,但构造函数中必须初始化所有的字段。结构体和类的主要区别如下图:
      class VS struct.jpg
    • 结构体和类的默认构造函数会把其中的字段初始化为0,false或null
    • 可以重载自己写的结构体的ToString方法,用合适的字符串进行输出
    • 可以把已赋值的结构体A 赋值给同类型的结构体变量B,内存中的存储是在桟上给A,B分配了各自的存储空间。**类 **则是在堆(heap)上分配了存储空间,在桟上存储了A,B指针指向堆上类的实例——即对象,如果A改变了对象的值,B也将随之改变。

    相关文章

      网友评论

        本文标题:c# - 数据类型 - 值类型

        本文链接:https://www.haomeiwen.com/subject/euxkxttx.html