在编写程序时,经常会用到两个功能模块非常相似,只不过是一个处理int数据,另一个处理string数据,或者其他数据。如果没有泛型的特性,我们只能定义两个方法来处理,因为参数的类型是不一样的。泛型就是用来解决这一类问题的。我们通过一种通用的数据类型,让方法保持一致,这样就只用一个方法即可。
泛型类和泛型方法同时具备可重用性、类型安全和高效率,这是非泛型类和方法不具备的特性。泛型通常用在集合在集合上的运行的方法中。这些集合所在的命名空间System.Collections.Generic
所以定义一个Node
类型,表示链表这种数据结构中的一个节点。由于这个节点中存储的数据不是确定的,而可能是任意一种数据类型,因此可以用泛型来定义这种数据。
public class Node<T>
{
public Node(T t)
{
next = null;
data = t;
}
private Node<T> Next
{
get { return next }
set { next = value }
}
private T data;
public T Data
{
get { return data; }
set { next = value; }
}
private T data;
public T data
{
get { return data; }
set { data = value; }
}
}
public class GenericDemo : MonoBehaviour
{
private void Start()
{
Node<int> intNode = new Node<int>(13);
Node<bool> boolNode = new<bool>(false);
Node<string> stringNode = new Node<string>("Geekanr");
}
}
总结:
对Node中的数据data使用泛型来表示。在Start()方法中看到,定义Node的对象的时候,需要确定Node中所存储的数据类型。由于在定义的时候data的类型已经确定了,因此就不存在类型转换、装箱、拆箱等问题,因此泛型是类型安全高效的。