1. 基础类型

System.IComparable

int CompareTo(object obj);

System.IComparable

int CompareTo(T obj);

System.IEquatable

bool Equals(T other)

System.IConvertible

TypeCode GetTypeCode();
bool ToBoolean(IFormatProvider provider);
char ToChar(IFormatProvider provider);
sbyte ToSByte(IFormatProvider provider);
byte ToByte(IFormatProvider provider);
short ToInt16(IFormatProvider provider);
ushort ToUInt16(IFormatProvider provider);
int ToInt32(IFormatProvider provider);
uint ToUInt32(IFormatProvider provider);
long ToInt64(IFormatProvider provider);
ulong ToUInt64(IFormatProvider provider);
float ToSingle(IFormatProvider provider);
double ToDouble(IFormatProvider provider);
Decimal ToDecimal(IFormatProvider provider);
DateTime ToDateTime(IFormatProvider provider);
String ToString(IFormatProvider provider);
Object ToType(Type conversionType, IFormatProvider provider);

Boolean :IComparable,IConvertible,IComparable,IEquatable

内部使用  bool m_value

然后维护了=1,=0 两个字段
维护了 "True","False" 的两个字段

Parse()
TryParse()

Char: IComparable,IConvertible,IComparable,IEquatable

内部使用 char m_value  来存值

maxvalue=oxffff;  //65535 两个字节,所以足够保存unicode了,这是为了简化unicode的操作的设计,所以char能够方便的保存汉字等unicode字符
minvalue=0
isxxxx()   //很多isxxx的方法

SByte: IComparable,IFormattable,IConvertible,IComparable,IEquatable

内部使用 sbyte m_value

MaxValue 0x7f;  //127 一个字节
MinValue = unchecked((sbyte)0x80); //注意sbyte的强制转换  -127

Parse()  居然是用的是Number.Parse32() 然后判断范围后直接转sbyte
Tryparse() -> Number.TryParse32()

Byte:IComparable,IFormattable,IConvertible

与sbyte的区别是只表示1个字节的正值

内部使用 byte m_value  来存值

maxvalue=oxff;  //255 一个字节
minvalue=0

short Int16 :

short m_value;

MaxValue = 0x7fff; //32767 两个字节
MinValue = unchecked((short)0x8000)  //注意short的转化,所以不是正的,而是-32768

ushort UInt16:

ushort m_value
MaxValue = 0xffff; //65535;
minValue = 0;

Int32

int m_value

MaxValue = 0x7fffffff;//21.47亿 4个字节
Minvlaue = unchecked((int)ox8000000); //-21.47亿 

UInt32

uint m_value;

MaxValue = 0xffffffff;
MinValue = 0U;

Int64

long m_value;

MaxValue = ox 7fff,ffff,ffff,ffff; //2^63-1 8字节
MinValue = unchecked(long(ox8000,0000,0000,0000)); // -2^63

UInt64

ulong m_value;

MaxValue = ox ffff,ffff,ffff,ffff; //2^64-1 8字节
MinValue = ox0;

Single: IComparable,IFormattable,IConvertible

4字节, 7位精度
float m_vlaue;

MinValue = (float)-3.40282346638528859e+38
MaxValue = (float)3.40282346638528859e+38;

sizeof 计算非托管类型

计算比如基元类型,所有的struct
sizeof(float);      //4
sizeof(double);     //8
sizeof(decimal);    //16
sizeof(TypeCode);   //4
sizeof(CustEnum);   //4 自定义枚举

Double

8字节,15-16 位精度
MaxValue = 1.7976931348623157E+308
MinValue = -1.7976931348623157E+308

Decimal

16字节,28-29 位精度
MaxValue = 79228162514264337593543950335m;
MinValue = -79228162514264337593543950335m;
posted @ 2017-10-19 21:35  给我一个理由  阅读(201)  评论(0编辑  收藏  举报