C#中所有的类都继承于OBJECT类
类型转换之间存在隐式和显示就是因为类型所占位数不同
bool -> System.Boolean (布尔型,其值为 true 或者 false)
char -> System.Char (字符型,占有两个字节,表示 1 个 Unicode 字符)
byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ~ 255)
sbyte -> System.SByte (带符号字节型,占 1 字节,表示 8 位整数,范围 -128 ~ 127)
ushort -> System.UInt16 (无符号短整型,占 2 字节,表示 16 位正整数,范围 0 ~ 65,535)
uint -> System.UInt32 (无符号整型,占 4 字节,表示 32 位正整数,范围 0 ~ 4,294,967,295)
ulong -> System.UInt64 (无符号长整型,占 8 字节,表示 64 位正整数,范围 0 ~ 大约 10 的 20 次方)
short -> System.Int16 (短整型,占 2 字节,表示 16 位整数,范围 -32,768 ~ 32,767)
int -> System.Int32 (整型,占 4 字节,表示 32 位整数,范围 -2,147,483,648 到 2,147,483,647)
long -> System.Int64 (长整型,占 8 字节,表示 64 位整数,范围大约 -(10 的 19) 次方 到 10 的 19 次方)
float -> System.Single (单精度浮点型,占 4 个字节)
double -> System.Double (双精度浮点型,占 8 个字节)
当高位数类型转到低位数类型时候
需要使用显示转换,截取相对应位数,如:
int i = 9;
byte[]=System.Conventer.getbyte(i);
低位数类型转换到高位数类型时候可直接转换
byte i = 9;
int k = i;
会自动补足位数;
2.基类和派生类之间的数据类型转换(引用转换)
例如A类继承与B类
B b = new A()
A a=(A)b
基类上的应用可以直接引用到其派生类中。在OO编程中,派生类的实例实际上就是基类的实例,但加上了一些额外的信息。
但是若
B b =new B()
A a = (A)B
就会报错,因为对象不是派生类的实例,而且派生类的引用无法引用基类实例所以错误。(基类引用可以引用派生类实例)
3.装箱和拆箱数据类型转换
引用和值类型进行装换时候就存在拆箱和装箱过程
引用类型和值类型的区别
引用类型放在托管堆中 值类型放在栈中
当预定义一个值类型时,会在栈中分配相对应的内存空间
而当声明一个引用类型时候,它只在栈存放一个内存地址指向托管堆中的值
int i=0;
string s = i.tostring()
如上,当值类型转换成引用类型时,在托管堆中临时建一个值为0的箱子,而s指向那个箱子
int t=(int)s
如上,当引用类型转换成值类型时,在栈中分配i=0的内存空间,就是拆箱