泛型简介
泛型是C#2.0最为强大的特点之一。泛型使得我们定义类型安全(type-safe)的数据结构。因为我们可以重用数据处理的算法而无需关注数据的特定类型,从而提高开发效率和代码质量。从观念上讲,泛型类似欲C++中的模板,但是他们的实现和功能却有着很大的不同。
泛型问题描述
假设一种常用的数据结构,例如stack,他提供的经典method比如push和pop。 当我们想要开发一个通用stack(genaral-purpose)的时候,我们会想利用这种stack能够处store任意类型的实例。在C#1.1中,我们只能用一个基于对象的(object-based) stack, 也就是在stack中的内部数据结构是不定型的(amorphous),然后stack 的method与objects进行交互。
比如
Public stack stack
{
obejct[] m_Items;
public void push(object item)
{...}
public object opo()
{...}
}
Stack mystack=new Stack();
mystack.push(1);
mystack.push(2);
int number=(int)stack.pop();
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GenericTest
{
public class Node<K, I>
{
public K m_key;
public I m_item;
public Node<K,I> next;
public Node()
{
}
public Node(K key, I item)
{
m_item = item;
m_key = key;
next = null;
}
}
public class List<K,I>
{
Node<K, I> m_listHead;
Node<K, I> m_listTail;
public List()
{
m_listHead = m_listTail = null;
}
public void InsertList(K key,I item)
{
Node<K, I> newNode = new Node<K, I>(key, item);
if (m_listHead == null)
m_listHead = newNode;
else
m_listTail.next= newNode;
m_listTail = newNode;
m_listTail.next = null;
}
public void ShowList()
{
Node<K,I> p;
p=m_listHead;
while (p!=null)
{
Console.WriteLine("key:{0} item:{1}", p.m_key, p.m_item);
p = p.next;
}
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("\nGeneric List 1 test:");
List<int, string> mylist = new List<int, string>();
mylist.InsertList(1, "herengang");
mylist.InsertList(2, "guliqun");
mylist.InsertList(4, "Herenchao");
mylist.ShowList();
List<DateTime, string> haha = new List<DateTime, string>();
Console.WriteLine("\nGeneric List 2 test:");
haha.InsertList(DateTime.Now, "AAA");
haha.InsertList(DateTime.Today, "BBB");
haha.ShowList();
}
}
}