有沒有人有任何關於如何/什麼是在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