大家好:        我们都知道在c#中数据类型转换,举例说明下:
 
       Convert.ToInt32(参数),括号中的参数,可以是很多类型,例如string,int ,double,decimal,object等类型,一共重载了19个方法。
      
       在这些重载的类型中,既然有了object类型,为什么还需要重载string,int,float等类型呢。       string,int,float等类型,应该都是从object继承过来了,所以写一个参数为object的方法就可以了,为什么要重载19个方法呢,请教大家帮我解释下,谢谢~!!!

解决方案 »

  1.   

    C#中定义的值类型包括原类型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、枚举(enum)、结构(struct)引用类型包括:类、数组、接口、委托、字符串等。 OBJECT是引用类型,但如果是int之类则这个应用可能是值,因为int也是继承自objectstring在内存的表示上是引用(如果有C基础就能很好明白),但在实际使用中,.NET把string弄成了值类型。所以不要把string当引用类型看。.NET中把引用的字符串值类型化的方案是每次对字符串变量赋值,包括字符串相加都是完全开辟新的存储空间给字符串变量使用。所以在使用string类型进行运算时比较消耗资源,此时可以使用stringbuilder类型替代。
      

  2.   

    我理解为满足各种人群需要,有人就愿意以object类型传递
      

  3.   

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

  4.   

    装拆箱 效率太低了。
    我做过实验,用List<T>和ArrayList。后者就是object类型,每次都要装拆箱。效率是List<T>三分之一
      

  5.   

    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)的话,可以就要做大量的判断。不如方法重载来得快,来得明显。