C# 泛型具体有什么好处?在什么地方能得以体现?
4个回答
展开全部
关于object类型:
1.object类型可以来引用任何类型的实例;
2.object类型可以存储任何类型的值;
3.可以定义object类型的参数;
4.可以把object作为返回类型。
但是--这样做有很大的问题
1.会因为程序员没有记住使用的类型而出错,造成类型不兼容;
2.值类型和引用类型的互化即装箱拆箱使系统性能下降。
C#2.0提出的泛型就是避免强制类型转换,减少装箱拆箱提高性能,减少错误。
System.Collections.Generic命名空间提供许多集合类和接口的泛型版本。
定义:
public class GenericList<T>
{
public void Add(T input)//T制定成类型参数
public T Add()//T制定成返回值
}
<T>的T是类型参数,起占位符的作用,编译时被真正类型取代。
使用泛型:
GenericList<int> list1 = new GenericList<int>();
GenericList<string> list2 = new GenericList<string>();
GenericList<类名> list3 = new GenericList<类名>();
GenericList<类名<int>> list4= new GenericList<类名<int>>();
以list1为例编译器生成以下的方法:
public void Add(int input)
public int Add()
有多个类型参数的泛型类:
public class 类名<T,U>
泛型约束:
确保泛型类使用的参数是提供特定方法的类型。
public class GenericList<T> where T : IEmployee
假如IEmployee接口包含A方法,编译器会验证用于替换T的类型一定要实现IEmployee接口。
泛型方法:允许采取定义泛型类时采用的方式
//定义泛型方法
static void Swap<T>(ref T lhs, ref T rhs)
{ T temp; temp = lhs; lhs = rhs; rhs = temp; }
//使用泛型方法
public static void TestSwap(){ int a=1,b=3;
Swap<int>(ref a,ref b);
string s1="Hello",s2="world";
Swap<string>(ref s1,ref s2);}
有泛型类,泛型接口,泛型方法,泛型委托
1.object类型可以来引用任何类型的实例;
2.object类型可以存储任何类型的值;
3.可以定义object类型的参数;
4.可以把object作为返回类型。
但是--这样做有很大的问题
1.会因为程序员没有记住使用的类型而出错,造成类型不兼容;
2.值类型和引用类型的互化即装箱拆箱使系统性能下降。
C#2.0提出的泛型就是避免强制类型转换,减少装箱拆箱提高性能,减少错误。
System.Collections.Generic命名空间提供许多集合类和接口的泛型版本。
定义:
public class GenericList<T>
{
public void Add(T input)//T制定成类型参数
public T Add()//T制定成返回值
}
<T>的T是类型参数,起占位符的作用,编译时被真正类型取代。
使用泛型:
GenericList<int> list1 = new GenericList<int>();
GenericList<string> list2 = new GenericList<string>();
GenericList<类名> list3 = new GenericList<类名>();
GenericList<类名<int>> list4= new GenericList<类名<int>>();
以list1为例编译器生成以下的方法:
public void Add(int input)
public int Add()
有多个类型参数的泛型类:
public class 类名<T,U>
泛型约束:
确保泛型类使用的参数是提供特定方法的类型。
public class GenericList<T> where T : IEmployee
假如IEmployee接口包含A方法,编译器会验证用于替换T的类型一定要实现IEmployee接口。
泛型方法:允许采取定义泛型类时采用的方式
//定义泛型方法
static void Swap<T>(ref T lhs, ref T rhs)
{ T temp; temp = lhs; lhs = rhs; rhs = temp; }
//使用泛型方法
public static void TestSwap(){ int a=1,b=3;
Swap<int>(ref a,ref b);
string s1="Hello",s2="world";
Swap<string>(ref s1,ref s2);}
有泛型类,泛型接口,泛型方法,泛型委托
展开全部
泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型及其方法的参数类型出现。泛型方法可以将其类型参数用作其返回值的类型或者其某个形参的类型。 由于.NET Framework 泛型的类型参数之实际类型在运行时均不会被消除 泛型约束
,运行速度会因为类型转换的次数减少而加快。 另外,使用 GetType 方法可於程序运行时得知泛型及其类型参数的实际类型,更可以运用反射编程。 允许对个别泛型的类型参数进行约束,包括以下几种形式(假设 C是泛型的类型参数, 是一般类、泛类,或是泛型的类型参数):T 是一个类。T 是一个值类型。T 具有无参数的公有建构方法。T 实现接口 I 。T 是 C ,或继承自 C 。
,运行速度会因为类型转换的次数减少而加快。 另外,使用 GetType 方法可於程序运行时得知泛型及其类型参数的实际类型,更可以运用反射编程。 允许对个别泛型的类型参数进行约束,包括以下几种形式(假设 C是泛型的类型参数, 是一般类、泛类,或是泛型的类型参数):T 是一个类。T 是一个值类型。T 具有无参数的公有建构方法。T 实现接口 I 。T 是 C ,或继承自 C 。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好处是不像数组需要一开始就定义长度,泛型能自动增长。而且方便索引,排列等。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议你在百度文库里搜索下关于泛型的文件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询