Exemplo n.º 1
0
        static void Main(string[] args)
        {
            try
            {
                int      iValue  = 123;
                string   sValue  = "456";
                DateTime dtValue = DateTime.Now;
                object   oValue  = new object();

                Console.WriteLine(typeof(List <int>));
                Console.WriteLine(typeof(Dictionary <string, int>));
                Console.WriteLine("*************************************");
                CommonMethod.ShowInt(iValue);
                CommonMethod.ShowString(sValue);
                CommonMethod.ShowDateTime(dtValue);


                Console.WriteLine("*************************************");
                CommonMethod.ShowObject(oValue);

                CommonMethod.ShowObject(iValue);
                CommonMethod.ShowObject(sValue);
                CommonMethod.ShowObject(dtValue);

                Console.WriteLine("*************************************");
                GenericMethod.Show <object>(oValue);
                GenericMethod.Show <int>(iValue);
                GenericMethod.Show(iValue);//类型参数可以省略,由编译器推断
                GenericMethod.Show <string>(sValue);
                GenericMethod.Show <DateTime>(dtValue);
                Console.WriteLine("*************************************");

                GenericConstraint.Show <People>(new People {
                    Id = 1001, Name = "lucy"
                });
                GenericConstraint.Show <Chinese>(new Chinese {
                    Id = 1002, Name = "Coco"
                });
                GenericConstraint.Show <JiangXi>(new JiangXi {
                    Id = 1003, Name = "Jack"
                });
                //GenericConstraint.Show<int>(1);//约束后,只能按约束传递

                //GenericConstraint.ShowInterface<People>(new People { Id = 1001, Name = "lucy" });
                GenericConstraint.ShowInterface <Chinese>(new Chinese {
                    Id = 1002, Name = "Coco"
                });
                GenericConstraint.ShowInterface <JiangXi>(new JiangXi {
                    Id = 1003, Name = "Jack"
                });
                GenericConstraint.ShowInterface <Japanese>(new Japanese {
                    Id = 1004, Name = "鬼子"
                });
                #region Monitor
                long commonTime  = 0;
                long objectTime  = 0;
                long genericTime = 0;
                {
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    for (int i = 0; i < 1000000000; i++)
                    {
                        ShowCommon(iValue);
                    }
                    stopwatch.Stop();
                    commonTime = stopwatch.ElapsedMilliseconds;
                }
                {
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    for (int i = 0; i < 1000000000; i++)
                    {
                        ShowObject(oValue);//装箱,值类型是分配在栈上的,引用类型是分配在堆上的
                    }
                    stopwatch.Stop();
                    objectTime = stopwatch.ElapsedMilliseconds;
                }
                {
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    for (int i = 0; i < 1000000000; i++)
                    {
                        ShowGeneric <int>(iValue);
                    }
                    stopwatch.Stop();
                    genericTime = stopwatch.ElapsedMilliseconds;
                }
                Console.WriteLine("commonTime={0}    objectTime={1}    genericTime={2}", commonTime, objectTime, genericTime);

                #endregion
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            try
            {
                // 欢迎大家来到.Net 高级班的Vip课程,我是Richard老师!
                // 今天是第十三期的第一次课:泛型
                //什么是泛型?
                //宽泛的,不确定的,就是不确定的类型
                //List<string> intlist = new List<string>();

                // var i = 1234; // 语法糖


                Console.WriteLine(typeof(List <>));
                Console.WriteLine(typeof(Dictionary <,>));

                Console.WriteLine("欢迎来到.net高级班vip课程,今天是Richard老师给大家带来的泛型Generic");
                int      iValue  = 123;
                string   sValue  = "456";
                DateTime dtValue = DateTime.Now;
                object   oValue  = "789";

                Console.WriteLine("***********************Common***********************");
                CommonMethod.ShowInt(iValue);
                CommonMethod.ShowString(sValue);
                CommonMethod.ShowDateTime(dtValue);

                Console.WriteLine("***********************Object***********************");
                CommonMethod.ShowObject(oValue);
                CommonMethod.ShowObject(iValue);
                CommonMethod.ShowObject(sValue);
                CommonMethod.ShowObject(dtValue);

                Console.WriteLine("***********************Generic***********************");
                // 泛型只有:泛型方法、泛型类、泛型接口、泛型委托
                //泛型方法调用的时候,需要加上<>,而且需要指定具体的类型、指定的类型和传入的参数类型保持一致。

                CommonMethod.Show(iValue);                                      //如果类型参数,可以通过参数类型推导出来,那么就可以省略
                                           /* CommonMethod.Show<int>(sValue);*/ // 因为类型错了
                CommonMethod.Show(sValue);
                CommonMethod.Show <DateTime>(dtValue);
                CommonMethod.Show <object>(oValue);

                //Monitor.Show();

                Console.WriteLine("***********************GenericCache***********************");
                //GenericCacheTest.Show();

                //泛型方法  一个方法满足多个类型的需求
                //泛型类   就是一个类 满足多个类型的需求
                //泛型接口 就是一个接口 满足多个多个类型的需求
                //泛型委托 就是一个委托 满足多个多个类型的需求

                //GenericConstraint.ShowObject(iValue);
                //GenericConstraint.ShowObject(sValue);
                //GenericConstraint.ShowObject(dtValue);
                //GenericConstraint.ShowObject(oValue);

                Console.WriteLine("***********************GenericConstraint***********************");
                // 泛型约束的好处:
                // 加了约束以后可以获取更多的功能;
                // 程序在调用的时候可以避免错误调用
                People people = new People()
                {
                    Id   = 123,
                    Name = "Richard"
                };

                Chinese chinese = new Chinese()
                {
                    Id   = 234,
                    Name = "习大大"
                };
                Hubei hubei = new Hubei()
                {
                    Id   = 345,
                    Name = "王市长"
                };
                Japanese japanese = new Japanese()
                {
                    Id   = 678,
                    Name = "福原爱"
                };

                // Object 方法因为可以出入任何类型,没有限制,如果传入的类型不匹配,就会发生异常(类型安全问题)
                //GenericConstraint.ShowObject(people);
                //GenericConstraint.ShowObject(chinese);
                //GenericConstraint.ShowObject(hubei);
                //GenericConstraint.ShowObject(japanese);

                //GenericConstraint.Show(people);
                //GenericConstraint.Show(chinese);
                //GenericConstraint.Show(hubei);
                //GenericConstraint.Show(japanese);//


                // GenericConstraint.GenericShow(123);

                GenericConstraint.GenericShow(people);
                GenericConstraint.GenericShow(chinese);
                GenericConstraint.GenericShow(hubei);
                GenericConstraint.GenericShow(japanese);//
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();
        }