下面是关于"c#InDepth的泛型实现实例代码"的完整攻略。
1. 什么是c#InDepth?
c#InDepth 是一本经典的 c# 高级编程书籍,由 Jon Skeet 所著。该书有关于泛型编程的讲解以及有许多泛型相关的实例代码。这些代码是泛型编程的经典案例,非常值得学习和掌握。
2. 泛型实现的实例代码
2.1 泛型列表实现
public class GenericList<T>
{
private class Node
{
public Node(T t)
{
Next = null;
Data = t;
}
public Node Next { get; set; }
public T Data { get; set; }
}
private Node head;
public void AddHead(T t)
{
Node n = new Node(t);
n.Next = head;
head = n;
}
public IEnumerator<T> GetEnumerator()
{
Node current = head;
while (current != null)
{
yield return current.Data;
current = current.Next;
}
}
}
以上是一个泛型列表的实现,使用了内部的私有类 Node 来表示列表的节点。AddHead() 方法用于向列表头部添加元素,GetEnumerator() 方法则返回一个枚举器,可以使用 foreach 循环遍历列表中的元素。下面是一个使用实例。
static void Main(string[] args)
{
GenericList<int> list = new GenericList<int>();
for (int i = 0; i < 10; i++)
{
list.AddHead(i);
}
foreach (int i in list)
{
Console.Write(i + " ");
}
}
程序输出:9 8 7 6 5 4 3 2 1 0
2.2 泛型栈的实现
public class GenericStack<T>
{
private int size;
private T[] items;
public GenericStack()
{
items = new T[10];
size = 0;
}
public void Push(T item)
{
if (size == items.Length)
{
T[] tmp = new T[items.Length * 2];
for (int i = 0; i < items.Length; i++)
{
tmp[i] = items[i];
}
items = tmp;
}
items[size++] = item;
}
public T Pop()
{
if (size == 0)
{
throw new InvalidOperationException();
}
T item = items[--size];
items[size] = default(T);
return item;
}
}
以上是一个泛型栈的实现。Push() 方法用于向栈中压入元素,Pop() 方法用于从栈中弹出元素。如果栈已满,Push() 方法将会扩展栈的大小。下面是一个使用实例。
static void Main(string[] args)
{
GenericStack<int> myStack = new GenericStack<int>();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
Console.WriteLine(myStack.Pop()); //输出:3
Console.WriteLine(myStack.Pop()); //输出:2
Console.WriteLine(myStack.Pop()); //输出:1
}
以上就是两个泛型实现的示例代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# in depth的泛型实现实例代码 - Python技术站