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也将随之改变。
网友评论