Private void Invariant()

{ Contract.Invariant(st!= null, "Инвариант: Отсутствуетобъект Stack");

}

public void Test()

{stringstr = "";

str = "1-ястрока";      st.Push(str);

str = "2-ястрока";      st.Push(str);

str = "3-ястрока";      st.Push(str);

while (st.Count>0) st.Pop1();

st.Pop3();

st.Pop2();

st.Pop1();

}

static public void Main(string[] args)

{Program p = new Program();

p.Test();

}

}                                                                                               //конецклассаProgram

}                                                                                               //конецпространства имен

Результат выполнения

Исправляемошибку, т.е. создаемобъект

Stack<string>st = new Stack<string>(); 

Результат выполнения в этом случае

 

Последовательно вызваны методы Pop3(), Pop2(), Pop1(), в каждом из которых сгенерировано исключение типа ContractException со своим описанием ошибки. При этом метод Pop1() пытается выполнить вызов 

list.RemoveAt(list.Count - 1);

Именно этот вызов генерирует не только исключение ContractException, но и исключение Exception, которое прерывает программу. Если вызвать методы в порядке 

Pop1();

Pop2();

Pop3();

то прогрмма будет прерываться на методе Pop1(), и обращения к Pop2(), Pop3() уже не будет.

 

 

https://xakep.ru/2010/12/13/54283/

безопасность С# приложений


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: