第九章 泛型

因为考试。有一个礼拜没有学习C#,发现忘记的还真快。

第九章--泛型。我记得当初我来这家公司面试,现在的主管面试我,问我用过泛型吗? 我那个时候就知道数据库里面貌似有个范式的概念,呵呵。写过几个小系统,就自认为对C#是了解。殊不知,连这个基础的问题都没有听说过。可笑啊~~~ 还是复习吧!

一。概述

     1.性能好:泛型不会涉及ArrayList的装箱,拆箱操作。

     2.类型安全:在使用时确定类型,所以在编译时可以发现类型的错误。

     3. 二进制代码的重用:定义一次,可以使用不同的类型实例化。

     4.代码量:引用类型共享同一个内部类的所有实现代码,只需要4字节的内存单元,就可以引用一个引用类型;值类型根据各自的大小实例化一个类型。

二。泛型类的特性

     1. 默认值 default : 将null赋予引用类型。将0赋予值类型。

     2. 约束 where : where T: struct ; where T :class ;where T:IFoo 必须执行接口IFoo; where T:Foo必须派生于基类Foo; where T:new() 必须有一个默认构造函数; where T:U 泛型类型T1派生于泛型类型T2;

         可以合并多个约束。

      3.继承: 泛型类可以派生于泛型基类,要求是必须重复接口的泛型类型,或者必须制定基类的类型。例如

        public class Bade<T>

        {}

        public class Derived<T>: Base<string>

        {}

      4.静态成员:泛型类的静态成员只在类的一个实例中共享。

三。 泛型使用

     1.泛型接口:使用泛型可以定义接口,接口中的方法可以带泛型参数。

     2.泛型方法:

            void Swap<T>(ref T x, ref T y)

              {

                   T temp;

                    temp = x;

                    x = y;

                    y = temp; 

                }

           使用 int i=4;

                  int j=5;

                  Swap(ref i,ref j);

      3. 泛型委托

      4. 对Array类使用泛型委托

          例: Array.Sort(persons,(p1,p2)=>p1.FirstName.CompareTo(p2.FirstNaem));

四。其他泛型类型

      1. Nullable<T>

          例:可空类型的两种表示:1 Nullable<T> x1;  2  int? x2;

       2.EventHandler<TEventArgs> 不用为每个事件处理程序定义新委托。

          例:public delegate void EventHandler<TEventArgs>(object sender,TEventArgs e) where TEventArgs : EventArgs

        3.ArraySegment<T>是结构 表示数组的一段。

        var segment = new ArraySegment<int>(arr,2,3) //2 表示偏移量,3表示个数。

         注意:ArraySegment 不复制原数组,只是访问原数组。如果数组中的元素改变了,原数组也会变化。  

posted on 2011-01-11 12:03  小齐宝  阅读(258)  评论(0)    收藏  举报

导航