学习C#泛型概述,泛型用来解决什么问题
程序员文章站
2024-03-14 21:21:59
...
一个先入先出的队列:
//一个先进先出的队列
class Queue
{
private const int DEFAULTQUEUESIZE = 100;
//队列的成员为int类型
private int[] data;
private int head = 0, tail = 0;
private int numElements = 0;
//构造器构造队列的大小默认值为100
public Queue()
{
this.data = new int[DEFAULTQUEUESIZE];
}
//指定队列大小的构造器
public Queue(int size)
{
if (size > 0)
{
this.data = new int[size];
}
else
{
throw new ArgumentOutOfRangeException("size", "Must be greater than zero");
}
}
//向队列添加数据项,使用循环缓存存放数据
public void Enqueue(int item)
{
if (this.numElements == this.data.Length)
{
throw new Exception("Queue is full");
}
this.data[this.head] = item;
this.head++;
this.head %= this.data.Length;
this.numElements++;
}
//从队列中删除数据项,出队和入队顺序一致
public int Dequeue()
{
if (this.numElements == 0)
{
throw new Exception("Queue is empty");
}
int queueItem = this.data[this.tail];
this.tail++;
this.tail %= this.data.Length;
this.numElements--;
return queueItem;
}
}
使用队列,
static void Main(string[] args)
{
Queue queue = new Queue();
queue.Enqueue(100);
queue.Enqueue(-25);
queue.Enqueue(33);
Console.WriteLine($"{queue.Dequeue()}");
Console.WriteLine($"{queue.Dequeue()}");
Console.WriteLine($"{queue.Dequeue()}");
}
显示输出:
可见数学项按入队顺序出队。
Queue类能支持int类型的成员的操作,创建字符串队列,float队列,甚至更复杂类型的队列怎么办?
方法一,重写Queue类,没错,可以实现,但是有没有更好方法呢?
方法二,使用object类,C#中可以object类引用任意类型的值或变量,但问题来了,
如何将Dequeue方法返回值转换为恰当的类型呢?
另外,object是引用类型,如果是值类型,就会消耗额外的内存和处理器时间,对每个数据项来说造成的性能开销不大,但如果创建大量数据,积累起来这个开销还是不容忽视的。
C#使用泛型可以解决这个问题。
上一篇: OpenCV Python 椭圆 和 FDDB 数据库
下一篇: 素数求和- 素数筛法