zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    
  • 相关阅读:
    JDK8 Optional类使用
    Kafka RocketMQ
    Dubbo,ElasticSearch,JVM,多线程/高并发,消息中间件 常问问题
    Redis
    java jvm 虚拟机
    25 岁做什么,可在 5 年后受益匪浅?
    设计模式
    并发与并行的理解
    多线程学习
    FireFox 如何在当前页面打开书签
  • 原文地址:https://www.cnblogs.com/alexzp/p/3357132.html
Copyright © 2011-2022 走看看