Číst v angličtině

Sdílet prostřednictvím


StackOverflowException Třída

Definice

Výjimka, která se vyvolá, když zásobník spuštění překročí velikost zásobníku. Tato třída se nemůže dědit.

public sealed class StackOverflowException : SystemException
[System.Serializable]
public sealed class StackOverflowException : SystemException
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class StackOverflowException : SystemException
Dědičnost
StackOverflowException
Atributy

Příklady

Následující příklad používá čítač k zajištění, že počet rekurzivních volání Execute metody nepřekročí maximum definované MAX_RECURSIVE_CALLS konstantou.

using System;

public class Example
{
   private const int MAX_RECURSIVE_CALLS = 1000;
   static int ctr = 0;
   
   public static void Main()
   {
      Example ex = new Example();
      ex.Execute();
      Console.WriteLine("\nThe call counter: {0}", ctr);
   }

   private void Execute()
   {
      ctr++;
      if (ctr % 50 == 0)
         Console.WriteLine("Call number {0} to the Execute method", ctr);
         
      if (ctr <= MAX_RECURSIVE_CALLS)
         Execute();
         
      ctr--;
   }
}
// The example displays the following output:
//       Call number 50 to the Execute method
//       Call number 100 to the Execute method
//       Call number 150 to the Execute method
//       Call number 200 to the Execute method
//       Call number 250 to the Execute method
//       Call number 300 to the Execute method
//       Call number 350 to the Execute method
//       Call number 400 to the Execute method
//       Call number 450 to the Execute method
//       Call number 500 to the Execute method
//       Call number 550 to the Execute method
//       Call number 600 to the Execute method
//       Call number 650 to the Execute method
//       Call number 700 to the Execute method
//       Call number 750 to the Execute method
//       Call number 800 to the Execute method
//       Call number 850 to the Execute method
//       Call number 900 to the Execute method
//       Call number 950 to the Execute method
//       Call number 1000 to the Execute method
//
//       The call counter: 0

Poznámky

StackOverflowException je vyvolána pro chyby přetečení zásobníku spuštění, obvykle v případě velmi hluboké nebo nevázané rekurze. Proto se ujistěte, že váš kód neobsahuje nekonečnou smyčku nebo nekonečnou rekurze.

StackOverflowException používá COR_E_STACKOVERFLOW HRESULT, který má hodnotu 0x800703E9. Instrukce Localloc jazyka IL (Intermediate Language) vyvolá StackOverflowException. Seznam počátečních hodnot vlastností objektu StackOverflowException naleznete v konstruktorech StackOverflowException .

Počínaje rozhraním .NET Framework 2.0 nelze zachytit StackOverflowException objekt s blokem try/catch a odpovídající proces je ve výchozím nastavení ukončen. V důsledku toho byste měli napsat kód, který detekuje přetečení zásobníku a zabrání mu. Pokud například vaše aplikace závisí na rekurzi, použijte k ukončení rekurzivní smyčky čítač nebo stavovou podmínku. Ilustrace této techniky najdete v části Příklady .

Poznámka

Použití atributu HandleProcessCorruptedStateExceptionsAttribute na metodu, která vyvolá výjimku , StackOverflowException nemá žádný vliv. Stále nemůžete zpracovat výjimku z uživatelského kódu.

Pokud vaše aplikace hostuje modul CLR (Common Language Runtime), může určit, že modul CLR má uvolnit doménu aplikace, ve které dochází k výjimce přetečení zásobníku, a nechat příslušný proces pokračovat. Další informace najdete v tématu Rozhraní ICLRPolicyManager.

Konstruktory

StackOverflowException()

Inicializuje novou instanci StackOverflowException třídy a nastaví Message vlastnost nové instance na zprávu dodanou systémem, která popisuje chybu, například "Požadovaná operace způsobila přetečení zásobníku". Tato zpráva bere v úvahu aktuální jazykovou verzi systému.

StackOverflowException(String)

Inicializuje novou instanci StackOverflowException třídy se zadanou chybovou zprávou.

StackOverflowException(String, Exception)

Inicializuje novou instanci StackOverflowException třídy se zadanou chybovou zprávou a odkazem na vnitřní výjimku, která je příčinou této výjimky.

Vlastnosti

Data

Získá kolekci párů klíč/hodnota, které poskytují další uživatelem definované informace o výjimce.

(Zděděno od Exception)
HelpLink

Získá nebo nastaví odkaz na soubor nápovědy přidružený k této výjimce.

(Zděděno od Exception)
HResult

Získá nebo nastaví HRESULT, kódovaná číselná hodnota, která je přiřazena ke konkrétní výjimce.

(Zděděno od Exception)
InnerException

Exception Získá instanci, která způsobila aktuální výjimku.

(Zděděno od Exception)
Message

Získá zprávu, která popisuje aktuální výjimku.

(Zděděno od Exception)
Source

Získá nebo nastaví název aplikace nebo objektu, který způsobuje chybu.

(Zděděno od Exception)
StackTrace

Získá řetězcovou reprezentaci okamžitých rámců v zásobníku volání.

(Zděděno od Exception)
TargetSite

Získá metodu, která vyvolá aktuální výjimku.

(Zděděno od Exception)

Metody

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetBaseException()

Při přepsání v odvozené třídě vrátí hodnotu Exception , která je původní příčinou jedné nebo více následných výjimek.

(Zděděno od Exception)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetObjectData(SerializationInfo, StreamingContext)
Zastaralé.

Při přepsání v odvozené třídě nastaví s SerializationInfo informacemi o výjimce.

(Zděděno od Exception)
GetType()

Získá typ modulu runtime aktuální instance.

(Zděděno od Exception)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
ToString()

Vytvoří a vrátí řetězcovou reprezentaci aktuální výjimky.

(Zděděno od Exception)

Událost

SerializeObjectState
Zastaralé.

Nastane, když je výjimka serializována k vytvoření objektu stavu výjimky, který obsahuje serializovaná data o výjimce.

(Zděděno od Exception)

Platí pro

Produkt Verze
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Viz také