就题目说的,我似懂非懂.我上上代码吧:var listInt = new List<int>();
listInt.Add(44);var listStr = new List<string>();
listStr.Add("hello");...
我只知道,所谓的"二进制"代码,是由"1"0"组成的不同的稳定状态的标志.这里的例子,是不是因为它们共享"相同的方法"....

解决方案 »

  1.   

    List<T>内部有一个数组T[],当T为值类型时,JIT会编译相应值类型数组以避免装箱拆箱,对于引用类型来说,就是一个object[],这样对于所有的引用类型的List,都用的是同一段代码?
      

  2.   

    所谓的二进制代码重用,指的是exe或者dll之类的编译后代码的重用,而不是原代码重用,二进制代码这里是指被编译后的程序,反省类等,当然也是1/0之类的,但它特指编译后的程序指令码,
      

  3.   

    至于说为何范型可以二进制重用,是因为范型代码其实都在操作Object类,而不是int或者String,范型类的二进制指令码处理的都是Object,不管反省参数是int还是String,因为int装箱后的Integer和String都是Object的派生类,所以二进制代码可以用同样方式处理它们,把它们当成Object处理,这样处理方法就一样了,至于new List<int>()和 new List<string>()其实new出来的东西都是一样的,只是加上反省参数,编译的时候可以检查类型错误而已,List内部处理int和String都是一样的,都当作Object处理,这样就实现了二进制代码级别上的虫蛹,
      

  4.   

    以前学JAVA 的泛型很肤浅…记得如List<int>是要装箱为Integer.
    我没搞懂的是,貌似c#的泛型是避免了这个,在性能上…
      

  5.   

    c#的List<int>不需要装箱,是因为int是struct,struct也是Object的派生类,而java没有结构体,所以int不是Object的派生类,只能装箱,其实c#的泛型不比java的高明多少,绝大部分机制还是一样的,