先学把语法学完再想这些.
语法懂了,但就是这个特性不懂。
@阿飞24: 泛型是必须的.有些事情是必须要用泛型做的.如果你要例子.
那就是List.和字典.
@吴瑞祥: 那代码的扩展是怎么一回事?
@阿飞24: 没听说过这个名词.应该写你看的文章的人自己编的
@吴瑞祥:C#高级编程上面有的
@阿飞24: 应该是他乱编的.或者是他的翻译有问题.
泛型就是用来做模版的.没什么代码的扩展这个说法.
至少他也得出个名次解释:什么叫代码的扩展.或者你给解释下什么叫代码的扩展.
我再给你说泛型为什么能实现"代码的扩展"
@吴瑞祥: 给:
代码的扩展
在用不同的类型实例化泛型时,会创建多少代码?
因为泛型类的定义会放在程序集中,所以用某个类型实例化泛型类不会在IL代码中复制这些类。但是,在JIT编译器把泛型类编译为内部码时,会给每个值类型创建一个新类。引用类型共享同一个内部类的所有实现代码。这是因为引用类型在实例化的泛型类中只需要4字节的内存单元(32位系统),就可以引用一个引用类型。值类型包含在实例化的泛型类的内存中。而每个值类型对内存的要求都不同,所以要为每个值类型实例化一个新类。
@codingHeart: 那"代码的扩展"到底是什么意思?是模版的意思吗?
@吴瑞祥: 作者并没有给示例代码说明,以上就是全部内容。我感觉是在说:代码扩展是指泛型类编译后的内部码代码(机器码),泛型类编译时会根据具体的实例化类型决定拓展出什么样的代码,值类型对应一个新类的实例(感觉像装箱),引用类型对应一个内部类(共享)以及引用这个类型的引用,此时泛型类的实例在内存上包括了:泛型本身的一些东西+值(新类)+引用(特定的引用类型),额外的这部分就是代码的拓展了。
@codingHeart: 是在说c#对泛型的实现方式吗?这个和学习泛型有啥关系.
那也不能说 C# 泛型的优点:代码的扩展
看不出来上面那一大堆表述哪里在说泛型的优点了.泛型的优点就是模版.硬生生扯出一个没人接受的新概念..
你说的代码的扩展,是指的扩展方法吧!
应该是作者自己的一个理解的表述,并不是专有术语,因为没有百科词条。
我来揣侧下:
List<string> fun(string[] arr){
.....数组转List....
}
这段代码写好了。
现在又要写个int[]转List,好吧:
List<int> fun(int[] arr){
.....数组转List....
}
又一段代码写好了。
现在还要写个float[]转List,卧槽,你肯定在想还有完没完,是不是还有double[]、long[]、Person[]、Date[].....
代码的拓展,即代码本身已有功能之外还能干其他的事儿。
当泛型出场后:
List<T> fun(Object[] arr){
.....数组转List....
}
于是这一段代码便得到了拓展,不仅仅只能干原来的事儿(转sting),还能干其他的事儿(转int、float....)
你这是二进制代码的重用,在C#高级编程(第九版)里面有讲到泛型的优点之一代码的扩展
@阿飞24: 嗯,看了下,作者确实区别了两个概念,我的理解见一楼那,供参考。
应该是说扩展方法吧。
比如C#的高级功能Linq,它的实现就离不开泛型和扩展方法。