首页 > 代码库 > 5.基元类型、引用类型和值类型
5.基元类型、引用类型和值类型
以下4行到吗生成完全相同的IL
int a = 0; //最方便的语法
System.Int32 b = 0; //方便的语法
int c = new int(); //不方便的语法
System.Int32 d = new System.Int32(); //最不方便的语法
C#基元类型与对应的FCL类型
C#中的基元类型 | FCL类型 | 是否与CLS兼容 | 描述 |
sbyte | System.SByte | N | 有符号8位值 |
byte | System.Byte | Y | 无符号8位值 |
short | System.Int16 | Y | 有符号16位值 |
ushort | System.UInt16 | N | 无符号16位值 |
int | System.Int32 | Y | 有符号32位值 |
uint | System.UInt32 | N | 无符号32位值 |
long | System.Int64 | Y | 有符号64位值 |
ulong | System.UInt64 | N | 无符号64位值 |
char | System.Char | Y | 16位Unicode字符(不像非托管C++中那样,char表示的是一个8位值) |
float | System.Single | Y | IEEE32位浮点数 |
double | System.Double | Y | IEEE 64位浮点数 |
bool | System.Boolean | Y | 一个True或者Flase值 |
decimal | System.Decimal | Y | 128位高精度浮点值,通常用于不容许有摄入误差的金融计算场合。在这128位中,1位表示浮点值的符号,96位表示浮点值本身(一个整数值,小数点位置由下面8个位来确定),8位表示用96位值除以浮点值所得结果的10的幂次(0~28)。其余的位尚未使用 |
string | System.String | Y | 一个字符数组 |
object | System.Object | Y | 所有类型的基类型 |
dynamic | System.Object | Y | 对于CLR, dynamic 和 object 完全一致。然而,C#编译器允许使用一个简单的语法,让dynamic变量参与动态调度。 |
- 尽量使用有符号的数值类型(比如 Int32 和 Int64),而不要使用无符号的数值类型(比如 UInt32 和 UInt64),这允许编译器检测更多的上溢/下溢错误。
- 如果代码发生不希望的溢出(可能因为无效的输入数据发生的),就把这些代码放在 checked 块中。同时还应捕捉 OverflowException。
- 将允许发生溢出的代码显示的放在一个 unchecked 块中,比如一个计算校验和(checksum)的时候。
任何称为类的类型都是引用类型。
- 引用类型总是从托管堆上分配
- 对象中的其他字节总设为零
- 从托管堆上分配一个对象时,可能强制执行一次垃圾收集操作
所有值类型都称为结构或枚举。
- 值类型一般在线程栈上分配
- 值类型并不包含一个指向实例的指针,相反,它包含了实例本身的字段,
- 值类型的实例不受垃圾回收站的控制
- 所有结构都是 System.ValueType 直接派生类,所有枚举都是从 System.Enum 的抽象类派生,后者又是从 System.ValueType 派生
值类型对象有两种表现形式:未装箱(unboxed)与已装箱(boxed),相反,引用类型总是处于已装箱形式。
来自为知笔记(Wiz)
5.基元类型、引用类型和值类型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。