有没有人有任何关于如何/什么是在C#中实现堆栈类的最佳方式的任何示例或想法?我知道已经有一个Stack类,但我需要了解如何实际实现一个Stack类。如何在C#中使用前/后置条件和不变量实现Stack类?
我还需要关于如何在C#中使用合同来指定该类的前提条件,后置条件和不变量的建议。我想我在ASP.NET MVC架构中创建模型时曾经使用过类似的东西,但我不完全确定它是否是相同的并且工作方式相同。 (我有点失去了前提条件/后置/不变量,如果你不能说已经 - 所以请原谅)
我的主要问题 - 可能有人给我建议在适当使用合同对于像Stack这样的类。
是的,我已经制定了努力:
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)];
}
}
}
看来你还没有为你做出任何努力。你有写过任何骨架代码吗?你有特定的问题或问题吗?或者是你的问题:“有没有人有任何例子或想法?”这是无法接受的模糊。 – abelenky
@abelenky是的,我写了接口以及构造函数/ push/pop/top。只是因为我没有发布,请不要认为我没有做出任何努力。我的问题大部分都是针对C#中的Contracts,因为我对如何正确使用它们感到困惑。 – Cody
难道有人请让我知道为什么我在我想学习的问题上得到-2? – Cody