第五讲(泛型)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 第五讲(泛型)

第五讲(泛型)

 2013/8/31 23:09:21  无极尊  博客园  我要评论(0)
  • 摘要:一、概述优点1:性能对值类型使用非泛型集合类,在把值类型转换为引用类型,和把引用类型转换为值类型时,需要进行装箱和封箱操作。如arryList数组。优点2:类型安全优点3:二进制代码的重用优点4:代码的扩展二、泛型类使用泛型类类型安全,不必装箱拆箱操作。三、泛型类的功能1.默认值可以使用default关键字,通过default关键字,将null赋予引用类型,讲0赋予值类型。2.约束泛型支持集中约束功能whereT:struct结构约束whereT:class类约束必须是引用类型whereT
  • 标签:泛型
一、概述
    优点1:性能
        对值类型使用非泛型集合类,在把值类型转换为引用类型,和把引用类型转换为值类型时,需要进行装箱和封箱操作。如arryList数组。
    优点2:类型安全
    优点3:二进制代码的重用
    优点4:代码的扩展
二、泛型类
    使用泛型类类型安全,不必装箱拆箱操作。
三、泛型类的功能
    1.默认值
        可以使用default关键字,通过default关键字,将null赋予引用类型,讲0赋予值类型。
    2.约束
        泛型支持集中约束功能
        where T:struct 结构约束
        where T:class    类约束必须是引用类型
        where T:IFoo    接口约束
        where T:Foo        必须派生自类Foo
        where T:new()    类型T必须有一个默认构造函数
        where T1:T2        派生自泛型T2
    3.继承
        泛型类型可以实现泛型接口,也可以派生自一个类,泛型类型可以派生自一个泛型基类。
        public class Base<T>
        {
        
        }
        public class Derived<T>:Base<string>
        {
        
        }
四、泛型接口
    1.斜变和抗变
        协变和抗变指对参数和返回值的类型进行转换。
        public class Person:IComparable<T>
        {
            public int CompareTo(T other)
            {
                return this.LastName.CompareTo(other.LastName);
            }
        }
五、泛型方法
        在泛型方法中,泛型类型用方法声明来定义。泛型方法可以在非泛型类中定义。
        例如:
            泛型方法如下:
                void Swap<T>(ref T x,ref T y)
                {
                    T temp;
                    temp = x;
                    x = y;
                    y = temp;
                }
            泛型方法调用如下:
                int i=4;
                int j=5;
                Swap<int>(ref i,ref j);
                Swap(ref i,ref j);//因为C#编译器会通过Swap()方法来获取参数类型,所以不需要吧泛型类型赋予方法调用。
六、带委托的泛型方法
七、泛型方法的重载
    using System;

    namespace Wrox.ProCSharp.Generics
    {

        public class MethodOverloads
        {
            public void Foo<T>(T obj)
            {
                Console.WriteLine("Foo<T>(T obj), obj type: {0}", obj.GetType().Name);
            }

            public void Foo(int x)
            {
                Console.WriteLine("Foo(int x)");
            }

            public void Bar<T>(T obj)
            {
                Foo(obj);
            }
        }

        class Program
        {
            static void Main()
            {
                var test = new MethodOverloads();
                test.Foo(33);
                test.Foo("abc");
                test.Bar(44);
            }
        }
    }
    显示结果:
        Foo(int x)
        Foo<T>(T obj), obj type: String
        Foo<T>(T obj), obj type: Int32

 

发表评论
用户名: 匿名