黑马程序员技术交流社区
标题:
怎样理解泛型?
[打印本页]
作者:
刘真
时间:
2012-4-9 14:10
标题:
怎样理解泛型?
泛型应该怎么用?或者说什么情
况下要用泛型?使用泛型有哪些好处?
作者:
刘冬晓
时间:
2012-4-9 14:58
通过泛型可以定义类型安全的数据类型,它最显著的应用就是创建集合类,可以约束集合类内的元素类型。比较常用的就是List<T>和Dictionary<k,v>例如:
List<T> aa=new List<T>();T表示在集合中规定的类型,通过索引来获得其中的值。
Dictionary<k,v> bb =new Dictionary<k,v>(); k表示键的类型,v表示值得类型,通过键来获得值。
作者:
职业规划-蔡红微老师
时间:
2012-4-9 17:30
什么是泛型?
通过泛型可以定义类型安全类,而不会损害类型安全、性能或工作效率。
您只须一次性地将服务器实现为一般服务器,同时可以用任何类型来声明和使用它。
为此,需要使用 < 和 > 括号,以便将一般类型参数括起来。
例如,可以按如下方式定义和使用一般堆栈:
public class Stack
{
T[] m_Items;
public void Push(T item)
{}
public T Pop()
{}
}
Stack stack = new Stack();
stack.Push(1);
stack.Push(2);
int number = stack.Pop();
代码块 2 显示一般堆栈的完整实现。
将代码块 1 (上篇《C#泛型简介》)与代码块 2 进行比较,您会看到,好像 代码块 1 中每个使用 Object 的地方在代码块 2 中都被替换成了 T,除了使用一般类型参数 T 定义 Stack 以外:
public class Stack
{}
在使用一般堆栈时,必须通知编译器使用哪个类型来代替一般类型参数 T(无论是在声明变量时,还是在实例化变量时):
Stack stack = new Stack();
编译器和运行库负责完成其余工作。所有接受或返回 T 的方法(或属性)都将改为使用指定的类型(在上述示例中为整型)。
代码块 2. 一般堆栈
public class Stack
{
readonly int m_Size;
int m_StackPointer = 0;
T[] m_Items;
public Stack():this(100)
{}
public Stack(int size)
{
m_Size = size;
m_Items = new T[m_Size];
}
public void Push(T item)
{
if(m_StackPointer >= m_Size)
throw new StackOverflowException();
m_Items[m_StackPointer] = item;
m_StackPointer++;
}
public T Pop()
{
m_StackPointer--;
if(m_StackPointer >= 0)
{
return m_Items[m_StackPointer];
}
else
{
m_StackPointer = 0;
throw new InvalidOperationException("Cannot pop an empty stack");
}
}
}
注 T 是一般类型参数(或类型参数),而一般类型为 Stack。Stack 中的 int 为类型实参。
该编程模型的优点在于,内部算法和数据操作保持不变,而实际数据类型可以基于客户端使用服务器代码的方式进行更改。
.NET 中的泛型使您可以重用代码以及在实现它时付出的努力。类型和内部数据可以在不导致代码膨胀的情况下更改,而不管您使用的是值类型还是引用类型。您可以一次性地开发、测试和部署代码,通过任何类型(包括将来的类型)来重用它,并且全部具有编译器支持和类型安全。因为一般代码不会强行对值类型进行装箱和取消装箱,或者对引用类型进行向下强制类型转换,所以性能得到显著提高。对于值类型,性能通常会提高 200%;对于引用类型,在访问该类型时,可以预期性能最多提高 100%(当然,整个应用程序的性能可能会提高,也可能不会提高)。本文随附的源代码包含一个微型基准应用程序,它在紧密循环中执行堆栈。该应用程序使您可以在基于 Object 的堆栈和一般堆栈上试验值类型和引用类型,以及更改循环迭代的次数以查看泛型对性能产生的影响。
作者:
刘真
时间:
2012-4-9 20:45
刘冬晓 发表于 2012-4-9 14:58
通过泛型可以定义类型安全的数据类型,它最显著的应用就是创建集合类,可以约束集合类内的元素类型。比较常 ...
可以定义类型安全的数据类型,它最显著的应用就是创建集合类。
作者:
pray
时间:
2014-4-26 08:10
楼主,支持!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2