C#的类型大概分为2种,1种是值类型,1种是引用类型,这里是大概分的,不是详细分的。
值类型(value types):
a、值类型的变量直接包含它们的数据;
b、每个变量拥有自己的副本,所以对其操作不会影响另一个(except ref 和 out 参数变量)。
类型 | 类别 | 范围 | 大小 | 类型后缀 | .NET Framework 类型 |
bool | Boolean | true || false | | | |
byte | 无符号、数值、整数 | 0 ~ 255 | 无符号 8 位整数 | | System.Byte |
char | 无符号、数值、整数 | U+0000 ~ U+ffff | 16 位 Unicode 字符 | | System.Char |
decimal | 数值、十进制 | ±1.0 × 10-28 ~ ±7.9 × 1028 | 28 到 29 位有效位 | M 或 m | System.Decimal |
double | 数值、浮点 | ±5.0 × 10-324 ~ ±1.7 × 10308 | 15 到 16 位(精度) | D 或 d | System.Double |
enum | Enumeration | byte、sbyte、short、ushort、int、uint、long或 ulong | | | |
float | 数值、浮点 | ±1.5 × 10-45 ~ ±3.4 × 1038 | 7 位(精度) | F 或 f | System.Single |
int | 有符号、数值、整数 | -2,147,483,648 ~ 2,147,483,647 | 有符号 32 位整数 | | System.Int32 |
long | 有符号、数值、整数 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 有符号 64 位整数 | L 或 l | System.Int64 |
sbyte | 有符号、数值、整数 | -128 ~ 127 | 有符号 8 位整数 | | System.SByte |
short | 有符号、数值、整数 | -32,768 ~ 32,767 | 有符号 16 位整数 | | System.Int16 |
struct | 用户定义的结构 | 构造函数、常量、字段、方法、属性、索引器、运算符、事件和嵌套类型 | | | |
uint | 无符号、数值、整数 | 0 ~ 4,294,967,295 | 无符号 32 位整数 | U 或 u | System.UInt32 |
ulong | 无符号、数值、整数 | 0 ~ 18,446,744,073,709,551,615 | 无符号 64 位整数 | UL 或 ul | System.UInt64 |
ushort | 无符号、数值、整数 | 0 ~ 65,535 | 无符号 16 位整数 | | System.UInt16 |
引用类型(reference typeset):
a、引用类型的变量保存的是它们对数据的引用,也成为对象;
b、两个变量完全可能引用同一个对象,所以对一个变量的操作会影响另一个引用此对象的变量。
1、class
2、委托
3、dynamic
4、接口
5、object
6、string
类型之间的运算细节:
这里首先要说的就是这个相同类型的运算,例如long/long,int/int等得出的结果是整数,那是因为得出的结果是数学值的舍尾取整(不是四舍五入),如果要得出有尾数的结果必须将一个其中一个数转为float或者double来操作才能得到想要的结果,例如:
int i=1;
int k =2;
double result = (double)i/(double)k
其他的转化的也大同小异,在这里就不一一的去试了。
PS:在转化数据的时候主要注意的是转化的两个数据的精度和范围(上面的表有),例如float转string或者double转float时精度会降低,大范围转小范围,小范围转大范围精度不同等这些都是要注意的;
Ps:在计算金额,或者计算精度或者转化类型的时候,建议用decimal类型来操作,这样可以精确自己要的尾数,不容易出错。
强类型转换和Convert转换的区别;