值类型(C# 参考)
值类型主要由两类组成:
结构分为以下几类:
初始化值类型
C# 中的局部变量经初始化后方可使用。因此,如果像下面这样声明了一个局部变量而未将其初始化:
int myInt;
那么在将其初始化之前,无法使用此变量。可使用下列语句将其初始化:
myInt = new int(); // Invoke default constructor for int type.
此语句等效于:
myInt = 0; // Assign an initial value, 0 in this example.
当然,可以像下面这样用同一个语句进行声明和初始化:
int myInt = new int();
- 或 -
int myInt = 0;
使用 new 运算符时,将调用特定类型的默认构造函数并对变量赋以默认值。在上例中,默认构造函数将值 0 赋给了 myInt。有关通过调用默认构造函数所赋的值的更多信息,请参见默认值表。
对于用户定义的类型,使用 new 来调用默认构造函数。例如,下列语句调用了 Point 结构的默认构造函数:
Point p = new Point(); // Invoke default constructor for the struct.
此调用后,该结构被认为已被明确赋值;也就是说该结构的所有成员均已初始化为各自的默认值。
有关 new 运算符的更多信息,请参见 new。
有关格式化数字类型输出的信息,请参见格式化数值结果表。
补充内容:
1.
值类型一般放在栈上,
1)
如果值类型是方法内的局部变量,他会在栈上分配内存;
2) 如果是实例对象成员变量时,它会在堆上分配内存(因为实例对象,对象本身就是引用类型来(指针放在栈),保存在堆里的,所以他当中的值类型数据也是放在堆里的)
2.引用类型的指针放在栈上,实际值放在堆上
如下图参考
值类型 | 引用类型 | |
变量中存放 | 真正的数据 | 指向数据的引用指针 |
内存空间分配 | 堆栈(Stack) | 托管堆(Managed Heap) |
内存需求 | 一般来说较少 | 较大 |
执行效能 | 较快 | 较慢 |
内存释放时间点 | 执行超过定义变量的作用域 | 由回收站负责回收 |
可以为null | 不可 | 可以 |