誰かがC#でStackクラスを実装する方法/最良の方法についての例やアイデアを持っていますか?すでにStackクラスがあることは理解していますが、実際にStackクラスを実装する方法を理解する必要があります。
また、C#でコントラクトを使用して、このクラスの前提条件、事後条件、および不変条件を指定する方法についてのアドバイスも必要です。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)];
}
}
}