首页 新闻 会员 周边

C# 泛型的优点:代码的扩展是怎么一回事?

0
悬赏园豆:20 [已关闭问题] 关闭于 2017-04-17 16:36

如题,C# 泛型的优点:代码的扩展是怎么一回事?求教?

Ruby_Lu的主页 Ruby_Lu | 初学一级 | 园豆:144
提问于:2017-04-17 14:45
< >
分享
所有回答(4)
0

先学把语法学完再想这些.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-04-17 14:47

语法懂了,但就是这个特性不懂。

支持(0) 反对(0) Ruby_Lu | 园豆:144 (初学一级) | 2017-04-17 14:48

@阿飞24: 泛型是必须的.有些事情是必须要用泛型做的.如果你要例子.

那就是List.和字典.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-04-17 14:53

@吴瑞祥: 那代码的扩展是怎么一回事?

支持(0) 反对(0) Ruby_Lu | 园豆:144 (初学一级) | 2017-04-17 14:54

@阿飞24: 没听说过这个名词.应该写你看的文章的人自己编的

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-04-17 14:54

@吴瑞祥:C#高级编程上面有的

支持(0) 反对(0) Ruby_Lu | 园豆:144 (初学一级) | 2017-04-17 14:55

@阿飞24: 应该是他乱编的.或者是他的翻译有问题.

泛型就是用来做模版的.没什么代码的扩展这个说法.

至少他也得出个名次解释:什么叫代码的扩展.或者你给解释下什么叫代码的扩展.

我再给你说泛型为什么能实现"代码的扩展"

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-04-17 14:58

@吴瑞祥: 给:

代码的扩展

在用不同的类型实例化泛型时,会创建多少代码?

因为泛型类的定义会放在程序集中,所以用某个类型实例化泛型类不会在IL代码中复制这些类。但是,在JIT编译器把泛型类编译为内部码时,会给每个值类型创建一个新类。引用类型共享同一个内部类的所有实现代码。这是因为引用类型在实例化的泛型类中只需要4字节的内存单元(32位系统),就可以引用一个引用类型。值类型包含在实例化的泛型类的内存中。而每个值类型对内存的要求都不同,所以要为每个值类型实例化一个新类。

支持(0) 反对(0) codingHeart | 园豆:1511 (小虾三级) | 2017-04-17 16:55

@codingHeart: 那"代码的扩展"到底是什么意思?是模版的意思吗?

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-04-17 17:08

@吴瑞祥: 作者并没有给示例代码说明,以上就是全部内容。我感觉是在说:代码扩展是指泛型类编译后的内部码代码(机器码),泛型类编译时会根据具体的实例化类型决定拓展出什么样的代码,值类型对应一个新类的实例(感觉像装箱),引用类型对应一个内部类(共享)以及引用这个类型的引用,此时泛型类的实例在内存上包括了:泛型本身的一些东西+值(新类)+引用(特定的引用类型),额外的这部分就是代码的拓展了。

支持(0) 反对(0) codingHeart | 园豆:1511 (小虾三级) | 2017-04-17 18:09

@codingHeart: 是在说c#对泛型的实现方式吗?这个和学习泛型有啥关系.

那也不能说 C# 泛型的优点:代码的扩展

看不出来上面那一大堆表述哪里在说泛型的优点了.泛型的优点就是模版.硬生生扯出一个没人接受的新概念..

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-04-17 18:16
0

你说的代码的扩展,是指的扩展方法吧!

Jeffcky | 园豆:2789 (老鸟四级) | 2017-04-17 15:14
0

应该是作者自己的一个理解的表述,并不是专有术语,因为没有百科词条。

我来揣侧下:

   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....)

codingHeart | 园豆:1511 (小虾三级) | 2017-04-17 15:54

你这是二进制代码的重用,在C#高级编程(第九版)里面有讲到泛型的优点之一代码的扩展

支持(0) 反对(0) Ruby_Lu | 园豆:144 (初学一级) | 2017-04-17 15:57

@阿飞24: 嗯,看了下,作者确实区别了两个概念,我的理解见一楼那,供参考。

支持(0) 反对(0) codingHeart | 园豆:1511 (小虾三级) | 2017-04-17 18:10
0

应该是说扩展方法吧。

比如C#的高级功能Linq,它的实现就离不开泛型和扩展方法。

行乎当行 | 园豆:347 (菜鸟二级) | 2017-04-17 16:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册