首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

看了一上午,做了一个Test,理解泛型。散分了解决方案

2012-02-10 
看了一上午,做了一个Test,理解泛型。。。。。。。。。散分了C# codeusing Systemusing System.Collectionsusing S

看了一上午,做了一个Test,理解泛型。。。。。。。。。散分了

C# code
using System;using System.Collections;using System.Collections.Generic;using System.Text;//泛型测试2009.1.6namespace ConsoleApplication1{    class Test    {        static void Main(string[] args)        {            ArrayList Array = new ArrayList();            Array.Add(2);            Array.Add(8);            Array.Add("HELLO,I AM A TYPE OF STRING!");            foreach (int p in Array)            {                Console.WriteLine(p);            }            //这里进行onboxing取消装箱,foreach (int p in Array),其中int p的类型int是foreach执行拆箱的强制类型,            //因此如果这里是创建一个创异类集合,必定会错误,因为"HELLO,WORLD"无法转换为int            Console.WriteLine(Int32.Parse(Array[0].ToString()));            Console.WriteLine(Int32.Parse(Array[1].ToString()));            //string aa = Array[2];//为了证明加入集合的字符串已经不再是字符串,这里是装箱过的类型object,所以编译错误,无法将object隐式转换成string,            Console.WriteLine(Array[2]);//WriteLine接受参数本身就是object,这里正常输出,如果输出字符串                     }    }} class Test2    {        static void Main(string[] args)        {            List<int> List3 = new List<int>();            List3.Add(0);            List3.Add(1);            List3.Add(2);            List3.Add("i am not here?");//编译器不能通过。            int the1 = List3[0];//呵呵,和上面相同的测试方式,这里说明加入的集合数据没有进行装箱操作,集合元素本身的确是一个int类型            foreach (int p in List3)             {                 Console.WriteLine(p);             }        }     }  class Test3    {        static void Main(string[] args)        {            string[] parm1 = { "I AM STRING1", "I AM STRING2", "I AM STRING3" };            Test3.Insert<string>(parm1);        }       public static void Insert<T>(T[] parms)        {            List<T> ListT = new List<T>();            if (parms.Length > 0)            {                for (int i=0; i< parms.Length; i++)                {                    ListT.Add(parms[i]);                }            }            foreach (T p in ListT)            {                Console.WriteLine(p);            }                          }    }


Test1为什么要泛型?
在foreach检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能,而且对于创建异类集合的时候。
即向集合加入不同类型数据的时候,如上, foreach (int p in Array)就不能迭代所有内容,遇见字符串类型错误,而且C#编译器在编译的时不出错,在运行时才显示此错误,

Test2代码使用了泛型?
代码说明了加入集合的过程没有在进行装箱向上转换为object的操作了,而且编译器能够通过安全检查,只要是输入非整形的就会报错的,
这里编译器会同时候报两次错误,
错误1与“System.Collections.Generic.List<int>.Add(int)”最匹配的重载方法具有一些无效参数C:\Documents and Settings\Administrator\桌面

\ConsoleApplication1\ConsoleApplication1\Program.cs4113ConsoleApplication1
错误2参数“1”: 无法从“string”转换为“int”C:\Documents and Settings\Administrator\桌面\ConsoleApplication1\ConsoleApplication1

\Program.cs4123ConsoleApplication1;

Test3如何用泛型?
第三个示例是简单的泛型应用,插入几个方法Insert,根据需要指定一个类型参数,就可以,编译器会自动检查类型是否和你提供的类型一致。

本人学习中,欢迎指正,谢谢大家


[解决办法]
up~
[解决办法]
收藏
[解决办法]
来看你头像...
[解决办法]
mark
[解决办法]
学习...
[解决办法]
顶钻研贴~
[解决办法]
来乐 接分了
[解决办法]
学习
------解决方案--------------------


学习
[解决办法]

[解决办法]
接分了!
[解决办法]
帮顶.
[解决办法]
学习
[解决办法]
学习
[解决办法]
JF
[解决办法]
顶,支持
泛型对程序有很大改进
[解决办法]
看看~~
[解决办法]
jf
[解决办法]
学习!
[解决办法]
You are a good man,thank you
[解决办法]
学习!
[解决办法]
MARK
[解决办法]
曾今很黄很暴力,现在很黑很安静!
[解决办法]
mark
[解决办法]
UP
[解决办法]
up
[解决办法]
学习 研究研究
[解决办法]
我打酱油。。
[解决办法]
学泛型,还是看STL
[解决办法]
支持开源, 谢谢分享
[解决办法]
up
[解决办法]
偷学下
[解决办法]
学习
[解决办法]

探讨
我打酱油。。

[解决办法]
mark
[解决办法]
接分,哈
  
================================================
偶要多学习。。。
================================================
[解决办法]
探讨
引用:
我打酱油。。

我才真的。

[解决办法]
mark
[解决办法]
收藏~
[解决办法]
路过,帮顶接分
[解决办法]
泛型对box和unbox的开销问题帮助很大
[解决办法]
up
[解决办法]
使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。
泛型最常见的用途是创建集合类。


.NET Framework 类库在 System.Collections.Generic 命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如 System.Collections 命名空间中的 ArrayList。
您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
可以对泛型类进行约束以访问特定数据类型的方法。
关于泛型数据类型中使用的类型的信息可在运行时通过反射获取。



A.减少了装箱拆箱;
B.编译时类型检查.

[解决办法]
顶下~~
[解决办法]
up
[解决办法]

够 弓 虽, 顶一个。


不过 泛型的产生并不全是为了 减少装拆箱。(装拆箱提高的性能是补认可的。但在引用类型上,泛型就并没有提高多少)

其实我觉得他最大的好处是为了类型的安全。
[解决办法]
收藏
[解决办法]
学习
[解决办法]
我来接分的。
[解决办法]
xx
[解决办法]
jf
[解决办法]
JF~
[解决办法]
43楼正解
[解决办法]
学习...
[解决办法]

探讨
学泛型,还是看STL

[解决办法]
UP
[解决办法]
up
[解决办法]
二百分,好强哦!
[解决办法]
探讨
引用:
引用:
我打酱油。。

我才真的。


我出来打酱油的....

[解决办法]
了解,接分
[解决办法]
学习中........
[解决办法]
学习
[解决办法]
JF
[解决办法]
接个分!
[解决办法]
jf
[解决办法]
up
[解决办法]
谢谢楼主分享
[解决办法]
来收藏下
[解决办法]
up
[解决办法]
up
[解决办法]
接分来了
[解决办法]
看看
[解决办法]
疯狂的想法。
[解决办法]
up
[解决办法]
.
------解决方案--------------------


学习
[解决办法]
留个记号,回家看
[解决办法]
很历害啊
[解决办法]
UP
[解决办法]
使用这个,至少有两个好处了

以前一直只知道一个。

一是减少装拆箱操作,二是避免类型的错误在运行时才被发现。
[解决办法]
不错
[解决办法]
学习
[解决办法]
UP
[解决办法]
学习
[解决办法]
有什么疯狂的没发现。。。
[解决办法]
Test1. 减少了重复的装箱和拆箱. 
Test2. 编译时类型检查,会过滤掉不符合制定类型的数据.

[解决办法]
晕死,我赶紧新建了一个记事本,结果才发现你写的不是java...
[解决办法]
up!!!
[解决办法]
UP!
[解决办法]
经鉴定。楼主爱学习,深入研究是好同志!
[解决办法]
up

[解决办法]
加深印象~~~~
[解决办法]
up~
[解决办法]
顶下。。。学习啦。
[解决办法]
学习。。顶
[解决办法]

[解决办法]
up
[解决办法]
楼上该说的都说到了。咱就只管接分好了。
[解决办法]
内容不错。谢谢分享!

热点排行