欢迎来到天天文库
浏览记录
ID:48031440
大小:325.50 KB
页数:36页
时间:2020-01-13
《C#_泛型c#_PowerPoint_.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C#.NET编程技术第七讲泛型内容提要泛型的概念使用C#泛型的目的C#泛型类型泛型约束泛型集合类型集合类型的排序与查找泛型的目的代码重用//C++代码templateTmin(Ta,Tb){return(a2、类)publicclassMyClass{privateT_value;publicMyClass(Tvalue){_value=value;}}staticvoidMain(string[]args){MyClassa=newMyClass(12);}C#的泛型(方法)publicclassMyClass{publicstaticvoidMyMethod(Ta){Console.WriteLine(a.ToString());}}staticvoidMain(string[]args){MyClass.MyMethod(12);}C#的泛型(3、委托)publicdelegatevoidMyDelegate(Tpara1);staticvoidMyFunction(inti){}staticvoidMain(string[]args){MyDelegatemyDelegate=newMyDelegate(MyFunction);myDelegate(12);}泛型类型的默认值值类型默认值是0引用类型默认是null泛型类型?default关键字:default(T)Ta=default(T);泛型约束给泛型类型T加上一些约束指示这个类型必须实现某个接口,或必须继承自某个基类//指示类型T必须实现ID4、isposable接口publicclassMyClasswhereT:IDisposable//指示类型T必须继承自System.StringpublicclassMyClasswhereT:System.String泛型约束(续)指示泛型类型必须是值类型/引用类型这类约束必须放在其它所有约束之前//指示类型T必须是值类型publicclassMyClasswhereT:struct//指示类型T必须是引用类型publicclassMyClasswhereT:class泛型约束(续)指示泛型类型必须有无参的构造函数这类约束必须放在其它所有约束之后//指示类5、型T必须是引用类型//指示类型T必须具有无参的构造函数publicclassMyClasswhereT:classwhereT:new()//orpublicclassMyClasswhereT:class,new()泛型约束实例//指示类型T必须是值类型classMyClasswhereT:struct{T_value;publicMyClass(Tvalue){_value=value;}publicT2MyFunc(Tme,T2other)whereT2:class,new()//指示类型T2必须是引用类型,必须具有无参的构造函数{if((_valu6、easT2)==null)returnother;elsereturn_valueasT2;}}泛型在C#中的主要用途基类模板classIntClass:MyClass函数抽象与重用boolGreatThan(Tl,Tr)集合类型重用泛型集合类型集合类型的最大问题:类型安全性或者叫类型确定性Array、ArrayList、HashTable,其成员都是object类型的这就是前面说的“天然的代码重用能力”object是一切类型的基类值类型成员的性能损失box和unbox值类型作为集合成员时,性能的损失ArrayListal=newArrayLilst();objec7、tobj=newobject();al.Add(obj);inti=10;al.Add(i);alobj托管堆i栈icopy需要显式类型转换(al[0]asMyClass).MyFunction();使用[]操作符取出对象时,默认类型总是object,需要显式类型转换潜在的类型危险由于object是一切类型的基类,意味着任何对象都可以放进集合里面ArrayListal=newArrayList();al.Add(12);al.Add(“Hello,World”);al
2、类)publicclassMyClass{privateT_value;publicMyClass(Tvalue){_value=value;}}staticvoidMain(string[]args){MyClassa=newMyClass(12);}C#的泛型(方法)publicclassMyClass{publicstaticvoidMyMethod(Ta){Console.WriteLine(a.ToString());}}staticvoidMain(string[]args){MyClass.MyMethod(12);}C#的泛型(
3、委托)publicdelegatevoidMyDelegate(Tpara1);staticvoidMyFunction(inti){}staticvoidMain(string[]args){MyDelegatemyDelegate=newMyDelegate(MyFunction);myDelegate(12);}泛型类型的默认值值类型默认值是0引用类型默认是null泛型类型?default关键字:default(T)Ta=default(T);泛型约束给泛型类型T加上一些约束指示这个类型必须实现某个接口,或必须继承自某个基类//指示类型T必须实现ID
4、isposable接口publicclassMyClasswhereT:IDisposable//指示类型T必须继承自System.StringpublicclassMyClasswhereT:System.String泛型约束(续)指示泛型类型必须是值类型/引用类型这类约束必须放在其它所有约束之前//指示类型T必须是值类型publicclassMyClasswhereT:struct//指示类型T必须是引用类型publicclassMyClasswhereT:class泛型约束(续)指示泛型类型必须有无参的构造函数这类约束必须放在其它所有约束之后//指示类
5、型T必须是引用类型//指示类型T必须具有无参的构造函数publicclassMyClasswhereT:classwhereT:new()//orpublicclassMyClasswhereT:class,new()泛型约束实例//指示类型T必须是值类型classMyClasswhereT:struct{T_value;publicMyClass(Tvalue){_value=value;}publicT2MyFunc(Tme,T2other)whereT2:class,new()//指示类型T2必须是引用类型,必须具有无参的构造函数{if((_valu
6、easT2)==null)returnother;elsereturn_valueasT2;}}泛型在C#中的主要用途基类模板classIntClass:MyClass函数抽象与重用boolGreatThan(Tl,Tr)集合类型重用泛型集合类型集合类型的最大问题:类型安全性或者叫类型确定性Array、ArrayList、HashTable,其成员都是object类型的这就是前面说的“天然的代码重用能力”object是一切类型的基类值类型成员的性能损失box和unbox值类型作为集合成员时,性能的损失ArrayListal=newArrayLilst();objec
7、tobj=newobject();al.Add(obj);inti=10;al.Add(i);alobj托管堆i栈icopy需要显式类型转换(al[0]asMyClass).MyFunction();使用[]操作符取出对象时,默认类型总是object,需要显式类型转换潜在的类型危险由于object是一切类型的基类,意味着任何对象都可以放进集合里面ArrayListal=newArrayList();al.Add(12);al.Add(“Hello,World”);al
此文档下载收益归作者所有