有没有人有关于如何/什么是在 C# 中实现 Stack 类的最佳方法的任何示例或想法?我知道已经有一个 Stack 类,但我需要了解如何实际实现一个 Stack 类。
我还需要有关如何在 C# 中使用 Contracts 为此类指定前置条件、后置条件和不变量的建议。我想我之前在 ASP.NET MVC 架构中创建模型时使用过类似的东西,但我不完全确定它是否是相同的东西并且以相同的方式工作。(如果你还不能告诉我,我对先决条件/后置条件/不变量有点迷茫 - 所以请多多包涵。)
我的主要问题- 有人可以给我关于正确使用合同的建议,例如堆栈。
是的,我已经付出了努力:
public interface IStack
{
void Push(Object e);
Object Pop();
Object Top();
void EnsureCapacity();
}
}
public class Stack : IStack
{
private Object[] elements;
private int size = 0;
public Stack()
{
elements = new Object[0];
}
public void Push(Object e)
{
// check if this array capacity has been reached and increase if needed
EnsureCapacity();
elements[size++] = e;
}
public Object Pop()
{
// check if the method call is invalid for the object's current state
if (size == 0) throw new InvalidOperationException("Stack.Pop");
Object result = elements[--size];
elements[size] = null;
return result;
}
public Object Top()
{
// check if the method call is invalid for the object's current state
if (size == 0) throw new InvalidOperationException("Stack.top");
return elements[(size - 1)];
}
private void EnsureCapacity()
{
if (elements.Length == size)
{
Object[] oldElements = elements;
elements = new Object[(2 * size + 1)];
}
}
}