C#新特性——泛型

 

C# 泛型称之为类型参数。泛型要点:

  • 在定义方法中,通常是将变量的值作为参数,但其实这个变量的类型本身也可以作为参数。
  • 泛型允许在调用的时候再指定这个类型参数是什么。
  • 在.net中,泛型能够给我们带来的三个明显好处是:类型安全、代码重用、减少装箱和拆箱操作。
  • 通过泛型可以定义类型安全类,而不会损害类型安全、性能或工作效率。
  • 可以用任何类型来声明和使用它。
  • 使用 ﹤ 和 ﹥ 括号,以便将一般类型参数括起来。

泛型的几个好处实例:

public class 泛型
    {

        //非泛型:类型不安全-编译时不能发现错误
        //执行提示:System.InvalidCastException: 指定的转换无效。
        public void ShowValues1()
        {
            ArrayList list = new ArrayList();
            list.Add(44);
            list.Add("string");  //编译通过

            foreach (int i in list)
            {
                Console.WriteLine("输出值:" + i);
            }
        }

        //泛型:类型安全-编译时即发现类型不匹配
        public void ShowValues2()
        {
            List<string> list = new List<string>();

            list.Add(44);  //--编译出错
            list.Add("string");

            foreach (string s in list)
            {
                Console.WriteLine("输出值:" + s);
            }
        }

        //非泛型:需要显式类型转换,损失性能
        public void ShowValues3()
        {
            ArrayList list = new ArrayList();
            list.Add(44);
            int i = (int)list[0];
            Console.WriteLine("输出值:" + i);
        }

        //泛型:使用时类型是确定的,无需进行类型转换
        public void ShowValues4()
        {
            List<int> list = new List<int>();

            list.Add(44);
            int i = list[0];

            Console.WriteLine("输出值:" + i);
        }
    }

 

//自定义一个泛型类
    public class MyGeneric<T>
    {
        public void ShowValues(T a)
        {
            Console.WriteLine("输出值:" + a.ToString());
        }

    }

    //用不同的类型参数调用自定义泛型
    public class Test_MyGeneric
    {        
        public void Test_int_ShowValues()
        {
            MyGeneric<int> fanXing = new MyGeneric<int>();
            fanXing.ShowValues(100);
        }

        public void Test_string_ShowValues()
        {
            MyGeneric<string> fanXing = new MyGeneric<string>();
            fanXing.ShowValues("Hello");
        }

        public void Test_doube_ShowValues()
        {
            MyGeneric<double> fanXing = new MyGeneric<double>();
            fanXing.ShowValues(3.14);
        }

    //定义泛型方法:交换两个变量
        public void Swap<T>(ref T a, ref T b)
        {
            T temp;
            temp = a;
            a = b;
            b = temp;
        }

    //交换整数
        public void TestSwap1()
        {
            int t = 1;
            int g = 2;
            Swap(ref t, ref g);
            Console.WriteLine("输出值t:" + t.ToString());
            Console.WriteLine("输出值g:" + g.ToString());
        }

    //交换字符串
        public void TestSwap2()
        {

            string t = "str1";
            string g = "str2";
            Swap(ref t, ref g);
            Console.WriteLine("输出值t:" + t.ToString());
            Console.WriteLine("输出值g:" + g.ToString());
        }


    //交换对象
        public class usrEntity
        {
            public string username { get; set; }
            public string sex { get; set; }
        }

        public void TestSwap3()
        {

            usrEntity t = new usrEntity(){ username = "小明", sex = "男" };
            usrEntity g = new usrEntity() { username = "小红", sex = "女" };
            Swap(ref t, ref g);
            Console.WriteLine("输出值t:" + t.username + ":" + t.sex);
            Console.WriteLine("输出值g:" + g.username + ":" + g.sex);
        }
    }

 

posted @ 2013-10-08 15:08  zp_Alex  阅读(292)  评论(0编辑  收藏  举报