日期:2014-05-17  浏览次数:20954 次

大家好,请教一个关于c#中Convert的问题
大家好: 

  我们都知道在c#中数据类型转换,举例说明下:
 
  Convert.ToInt32(参数),括号中的参数,可以是很多类型,例如string,int ,double,decimal,object等类型,一共重载了19个方法。
   
  在这些重载的类型中,既然有了object类型,为什么还需要重载string,int,float等类型呢。

  string,int,float等类型,应该都是从object继承过来了,所以写一个参数为object的方法就可以了,为什么要重载19个方法呢,请教大家帮我解释下,谢谢~!!!

------解决方案--------------------
C#中定义的值类型包括原类型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、枚举(enum)、结构(struct)

引用类型包括:类、数组、接口、委托、字符串等。 

OBJECT是引用类型,但如果是int之类则这个应用可能是值,因为int也是继承自object

string在内存的表示上是引用(如果有C基础就能很好明白),但在实际使用中,.NET把string弄成了值类型。所以不要把string当引用类型看。

.NET中把引用的字符串值类型化的方案是每次对字符串变量赋值,包括字符串相加都是完全开辟新的存储空间给字符串变量使用。所以在使用string类型进行运算时比较消耗资源,此时可以使用stringbuilder类型替代。
------解决方案--------------------
我理解为满足各种人群需要,有人就愿意以object类型传递
------解决方案--------------------
c# 是强类型语言,如果全用object,免不了装拆箱,效率不高。
------解决方案--------------------
装拆箱 效率太低了。
我做过实验,用List<T>和ArrayList。后者就是object类型,每次都要装拆箱。效率是List<T>三分之一
------解决方案--------------------
建议楼主好好了解一下装箱拆箱!
------解决方案--------------------
探讨

c# 是强类型语言,如果全用object,免不了装拆箱,效率不高。

------解决方案--------------------
1、是因为有明确类型提高处理效率(避免频繁装箱/拆箱)
2、是为了实现不同在转换方式
以Convert.ToInt32(string)和Convert.ToInt32(Char)为例:
Convert.ToInt32(string):返回值是对 value 调用 Int32.Parse 方法的结果
Convert.ToInt32(Char):返回值是 value 参数的 UTF-16 编码码位

比如我们有一个字母a
用Convert.ToInt32("a")结果肯定是错误的
而用Convert.ToInt32('a')则可以返回97

从这点可以看出,不同的重载对于实现方式是不一样的。

Convert.ToInt32(bool):返回值:value 为 true,则为数字 1;否则,为 0


如果只写一个Convert.ToInt32(object)的话,可以就要做大量的判断。不如方法重载来得快,来得明显。