科技企业网站建设深圳网站建设公司地图
web/
2025/10/3 1:26:08/
文章来源:
科技企业网站建设,深圳网站建设公司地图,重庆网站设计工作室,黑龙江门户网站建设深入浅出.NET泛型编程(1) 使用泛型集合 .NET 2.0的System.Collections.Generics 命名空间包含了泛型集合定义。各种不同的集合/容器类都被参数化了。为使用它们,只需简单地指定参数化的类型即可。请看例2:例2.类型安全的泛型列表List#xff1c;int#xff1e… 深入浅出.NET泛型编程(1) 使用泛型集合 .NET 2.0的System.Collections.Generics 命名空间包含了泛型集合定义。各种不同的集合/容器类都被参数化了。为使用它们,只需简单地指定参数化的类型即可。请看例2: 例2.类型安全的泛型列表 Listint aList new Listint();aList.Add(3);aList.Add(4);// aList.Add(5.0);int total 0;foreach(int val in aList){ total total val;}Console.WriteLine(Total is {0}, total); 在例2中我编写了一个泛型的列表的例子在尖括号内指定参数类型为int。该代码的执行将产生结果Total is 7。现在,如果我去掉语句doubleList.Add(5.0)的注释我将得到一个编译错误。编译器指出它不能发送值5.0到方法Add(),因为该方法仅接受int型。不同于例1,这里的代码实现了类型安全。 5. CLR对于泛型的支持 泛型不仅是一个语言级上的特征。.NET CLR能识别出泛型。在这种意义上说,泛型的使用是.NET中最为优秀的特征之一。对每个用于泛型化的类型的参数类也同样没有脱离开微软中间语言(MSIL)。换句话说,你的配件集仅包含你的参数化的数据结构或类的一个定义而不管使用多少种不同的类型来表达该参数化的类型。例如,如果你定义一个泛型类型MyListT仅仅该类型的一个定义出现在MSIL中。当程序执行时,不同的类被动态地创建,每个类对应该参数化类型的一种类型。如果你使用MyListint和MyListdouble有两种类即被创建。当你的程序执行时让我们进一步在例3中分析这一点。 例3.创建一个泛型类 //MyList.csUsing directives#region Using directivesusing System;using System.Collections.Generic;using System.Text;#endregionnamespace CLRSupportExample{ public class MyListT { private static int objCount 0; public MyList() {objCount; } public int Count { get {return objCount; } } }}//Program.csUsing directives#region Using directivesusing System;using System.Collections.Generic;using System.Text;#endregionnamespace CLRSupportExample{ class SampleClass {} class Program { static void Main(string[] args) { MyListint myIntList new MyListint(); MyListint myIntList2 new MyListint(); MyListdouble myDoubleList new MyListdouble(); MyListSampleClass mySampleList new MyListSampleClass(); Console.WriteLine(myIntList.Count); Console.WriteLine(myIntList2.Count); Console.WriteLine(myDoubleList.Count); Console.WriteLine(mySampleList.Count); Console.WriteLine(new MyListsampleclass().Count); Console.ReadLine(); } }}该例中我创建了一个称为MyList泛型类。为把它参数化我简单地插入了一个尖括号。在内的T代表了实际的当使用该类时要指定的类型。在MyList类中定义了一个静态字段objCount。我在构造器中增加它的值。因此我能发现使用我的类的用户共创建了多少个那种类型的对象。属性Count返回与被调用的实例同类型的实例的数目。 在Main()方法,我创建了MyListint的两个实例一个MyListdouble的实例还有两个MyListSampleClass的实例--其中SampleClass是我已定义了的类。问题是:Count(上面的程序的输出)的值该是多少在你继阅读之前试一试回答这个问题。 解决了上面的问题你得到下列的答案了吗 1222314152 6/**//*注意这里是2。因为这个是运行时动态创建的在编译时static的变量值为1如同第一第二行他们都是2因为在编译时就已经创建两个int类型的实例所以static的值是2*/前面两个2对应MyListint第一个1对应MyListdouble第二个1对应MyListSampleClass--在此仅创建一个这种类型的实例。最后一个2对应MyListSampleClass因为代码中又创建了这种类型的另外一个实例。上面的例子说明MyListint是一个与MyListdouble不同的类而MyListdouble又是一个与MyListSampleClass不同的类。因此在这个例中,我们有四个类MyList: MyListTMyListintMyListdouble和MyListX。注意虽然有4个MyList类但仅有一个被存储在MSIL。怎么能证明这一点请看图1显示出的使用工具ildasm.exe生成的MSIL代码。6. 泛型方法 除了有泛型类你也可以有泛型方法。泛型方法可以是任何类的一部分。让我们看一下例4: 例4.一个泛型方法 public class Program{ public static void CopyT(ListT source, ListT destination) { foreach (T obj in source) { destination.Add(obj); } } static void Main(string[] args) { Listint lst1 new Listint(); lst1.Add(2); lst1.Add(4); Listint lst2 new Listint(); Copy(lst1, lst2); Console.WriteLine(lst2.Count); }}Copy()方法就是一个泛型方法它与参数化的类型T一起工作。当在Main()中激活Copy()时编译器根据提供给Copy()方法的参数确定出要使用的具体类型。 posted on 2005-08-19 23:24 海盗 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/Grisson/archive/2005/08/19/218844.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85932.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!