Generic 方法

1定义

泛型方法是使用类型参数声明的方法。

 

class Class3

    {

        void Swap<T>(ref T a, ref T b)

        {

            T temp = a;

            a = b;

            b = temp;

        }

 

        /*Generate two error

           1 找不到类型或命名空间名称T(是否缺少 using 指令或程序集引用?)

           2 找不到类型或命名空间名称T(是否缺少 using 指令或程序集引用?)

        void Swap(ref T a,ref T b)

        {

            T temp = a;

            a = b;

            b = temp;

        }

        */

}

 

void Swap<T>(ref T a, ref T b)其实就是 void Swap(ref T a, ref T b),但是在非泛型类中写成

void Swap(ref T a, ref T b)编译通不过,必须把参数T 提到方法名后。在泛型类中void Swap(ref T a, ref T b)编译可以通过。

l   调用时可以省略方法后的类型参数

 

int a = 3, b = 5;

            Class3.Swap<int>(ref a, ref b);

 

            string aa="aa",bb="bb";

            Class3.Swap<string>(ref aa,ref bb);

 

            //no error ,compiler can khnow call what

            Class3.Swap(ref a, ref b);

        Class3.Swap(ref aa,ref bb);

2注意:

在泛型类中,非泛型方法可以访问类级别类型参数

泛型方法中也可以使用类型约束

public static void SwapValueType<T1>(ref T1 a, ref T1 b) where T1 : struct

       {

           T1 temp = a;

           a = b;

           b = temp;

   }

只针对值类型的数据交换

l   泛型方法可以使用许多类型参数进行重载。

 

 public static void SomeOperate<T>(T a)

        {

 

        }

 

        public static void SomeOperate<T, U>(T a, U b)

        {

        }

 

posted @ 2009-09-19 09:49  b0b0  阅读(406)  评论(0编辑  收藏  举报