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(); }
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(); }