记录写下实际开发环境中,c#的那么多类型,什么情况下使用更好的类型可以到达优化的目的,记录常用类型。
目录
数据类型
C#中有两种数据类型,分别是值类型与引用类型。
一、值类型
什么是值类型
值类型
我们看看一个小案列
int a = 1;
int b = a;
b = 2;
Console.WriteLine(a);
Console.ReadKey();
//结果a为1
为什么会这样,因为他就是值类型,后面我们通过调试来看看他的执行流程,发生了什么改变。
可以看见b变量是和a一样的值。当前是引用了a变量的内存地址。
我们把变量a拉过去可以看见他的内存地址 ,也把b变量拉过去对比,可以看见是一样的,我们继续往下执行。
可以看见b发生了变化,但a没有变,现在我们在看看他们的内存地址
此时b内存地址更变了,可以发现,没有给b进行赋值,输出的地址为a的值,当我们给b赋值时,他创建了一个副本新内存地址。他们的关系,在没有赋值前b是引用类型。
值类型是在赋值时被确定的,他在内存当中,栈里存的是值,栈的速度快,堆的速度慢,但栈空间小,所以值类型都有自己的上限,如int类型,32位,但他的取值范围是-2147483648到2147483648,当超出这个范围就会报范围错误。有时候正数突然变成负数了,因为正数的极限是负数,比如2147483648再加1,他就变成了一个负值。
所以当需要更长的数值时可以用long,但还需要比long跟长,一般我们使用字符串。
回到主题
1.c#的整形
C#中整形又分为byte 、short 、int、long 类型,并且定义了有符号数和无符号数
byte | 8 位无符号整数 | 0 到 255 | 0 |
int | 32 位有符号整数类型 | -2,147,483,648 到 2,147,483,647 | 0 |
long | 64 位有符号整数类型 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L |
sbyte | 8 位有符号整数类型 | -128 到 127 | 0 |
short | 16 位有符号整数类型 | -32,768 到 32,767 | 0 |
uint | 32 位无符号整数类型 | 0 到 4,294,967,295 | 0 |
ulong | 64 位无符号整数类型 | 0 到 18,446,744,073,709,551,615 | 0 |
ushort | 16 位无符号整数类型 | 0 到 65,535 | 0 |
byte这个类型常用于文档操作,io流那一块,还有加密,单位B。
还有一个更小的单位:bit,单位b,二进制的一位,就是1b,而8b=1B,这个单位常用于读取字节,标识删除和有效。如状态只有0 1,就可以用bit
short比较少用,一般用于比较长的状态。
用得最多的就是int和long了。
2.浮点型
C#将浮点型分为单精度浮点型和双精度浮点型。
decimal | 128 位精确的十进制值,28-29 有效位数 | (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 | 0.0M |
double | 64 位双精度浮点型 | (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 | 0.0D |
float | 32 位单精度浮点型 | -3.4 x 1038 到 + 3.4 x 1038 | 0.0F |
C#默认的浮点型是double 类型,如果需要使用单精度浮点型,则需要在数值后面加上f或者F来表示
decimal类型,它是C#中精度最高的浮点类型,它占16个字节, decimal类型专门用于进行财务计算,在数字后面加上字符M或m,表示是把这个数字指定为decimal类型。除了在数字后面加大写M还可以在数字前面直接加decimal,如果是小数的话,小数最后一位是,就不会显示出来,如果是整数则会显示出来。
3.字符型
char | 16 位 Unicode 字符 | U +0000 到 U +ffff | '\0' |
字符型只能存放一个字符,并且他只能用单引号,因为他固定使用2个字节,可以存放一个汉字。如果使用双引号则是字符串,他只能使用单引号来存储。
双引号与单引号有什么区别:双引号是字符串,单引号表示字符
字符串和字符之间有什么区别:字符他只占用一个字节,字符串最少两个。
使用场景:char型的范围是-128~+127,虽然是字符但不一定就必须存字符,他的空间比较小,比如做小功能,他计算的最大结果没有超出127,那么用char是最好的,如果用int消耗的空间会更多。
二、引用类型
1.枚举型enum
枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。
C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。
声明枚举的一般语法:他需要在类的里面且方法外面
enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat };
调用
int x=(int)Day.Sun;
int y = (int)Day.Sat;
Console.WriteLine("x:{0},y:{1}", x,y);//输出0,6,因为第一位0开始,最后一位位置为6
通常枚举用在我们需要用整形来判断某些操作时,我们可以给整形数字进行命名,这个就可以用到枚举。
总结
以上就是基本常用值类型的使用总结,什么情况下用什么,一些比较少用的总结出来。