StackOverflowException StackOverflowException StackOverflowException StackOverflowException Class

Definice

Výjimka, která je vyvolána, když dojde k přetečení zásobníku spuštění, protože obsahuje příliš mnoho volání vnořených metod.The exception that is thrown when the execution stack overflows because it contains too many nested method calls. Tuto třídu nelze zdědit.This class cannot be inherited.

public ref class StackOverflowException sealed : SystemException
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public sealed class StackOverflowException : SystemException
type StackOverflowException = class
    inherit SystemException
Public NotInheritable Class StackOverflowException
Inherits SystemException
Dědičnost
StackOverflowExceptionStackOverflowExceptionStackOverflowExceptionStackOverflowException
Atributy

Příklady

V následujícím příkladu je použita hodnota pro zajištění, že počet rekurzivních volání Execute metody nepřekračuje maximum definované konstantou MAX_RECURSIVE_CALLS.The following example uses a counter to ensure that the number of recursive calls to the Execute method do not exceed a maximum defined by the MAX_RECURSIVE_CALLS constant.

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
Module Example
   Private Const MAX_RECURSIVE_CALLS As Integer = 1000
   Dim ctr As Integer = 0

   Public Sub Main()
      Execute()
      Console.WriteLine()
      Console.WriteLine("The call counter: {0}", ctr)
   End Sub

   Private Sub Execute()
      ctr += 1
      If ctr Mod 50 = 0 Then
         Console.WriteLine("Call number {0} to the Execute method", ctr)
      End If
      
      If ctr <= MAX_RECURSIVE_CALLS Then
         Execute()
      End If

      ctr -= 1
   End Sub
End Module
' 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

StackOverflowExceptionje vyvolána pro chyby přetečení zásobníku spuštění, obvykle v případě velmi hlubokého nebo neohraničené rekurze.StackOverflowException is thrown for execution stack overflow errors, typically in case of a very deep or unbounded recursion. Proto se ujistěte, že váš kód nemá nekonečné smyčky nebo nekonečné rekurze.So make sure your code doesn't have an infinite loop or infinite recursion.

StackOverflowExceptionpoužívá HRESULT COR_E_STACKOVERFLOW, který má hodnotu 0x800703E9.StackOverflowException uses the HRESULT COR_E_STACKOVERFLOW, which has the value 0x800703E9. Bude Localloc vyvolánaStackOverflowExceptioninstrukce pro převodní jazyk (IL).The Localloc intermediate language (IL) instruction throws StackOverflowException. Seznam počátečních hodnot StackOverflowException vlastností objektu StackOverflowException naleznete v tématu konstruktory.For a list of initial property values for a StackOverflowException object, see the StackOverflowException constructors.

Počínaje .NET Framework 2,0 nemůžete StackOverflowException zachytit objekt try / catch s blokem a odpovídající proces je ve výchozím nastavení ukončen.Starting with the .NET Framework 2.0, you can't catch a StackOverflowException object with a try/catch block, and the corresponding process is terminated by default. V důsledku toho byste měli napsat kód pro detekci a zabránění přetečení zásobníku.Consequently, you should write your code to detect and prevent a stack overflow. Například pokud vaše aplikace závisí na rekurzi, použijte čítač nebo stavový stav pro ukončení rekurzivní smyčky.For example, if your app depends on recursion, use a counter or a state condition to terminate the recursive loop. Ilustraci této techniky najdete v části s Příklady .See the Examples section for an illustration of this technique.

Poznámka

Použití atributu na metodu, která StackOverflowException vyvolá vlastnost nemá žádný vliv. HandleProcessCorruptedStateExceptionsAttributeApplying the HandleProcessCorruptedStateExceptionsAttribute attribute to a method that throws a StackOverflowException has no effect. Stále nelze zpracovat výjimku z uživatelského kódu.You still cannot handle the exception from user code.

Pokud je vaše aplikace hostitelem modulu CLR (Common Language Runtime), může určit, že má modul CLR uvolnit doménu aplikace, ve které dojde k výjimce přetečení zásobníku, a nechat odpovídající proces pokračovat.If your app hosts the common language runtime (CLR), it can specify that the CLR should unload the application domain where the stack overflow exception occurs and let the corresponding process continue. Další informace najdete v tématu rozhraní ICLRPolicyManager.For more information, see ICLRPolicyManager Interface.

Konstruktory

StackOverflowException() StackOverflowException() StackOverflowException() StackOverflowException()

Inicializuje novou instanci StackOverflowException třídy, Message nastaví 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."Initializes a new instance of the StackOverflowException class, setting the Message property of the new instance to a system-supplied message that describes the error, such as "The requested operation caused a stack overflow." Tato zpráva přihlíží k aktuální jazykové verze systému.This message takes into account the current system culture.

StackOverflowException(String) StackOverflowException(String) StackOverflowException(String) StackOverflowException(String)

Inicializuje novou instanci třídy StackOverflowException třídy pomocí zadané chybové zprávy.Initializes a new instance of the StackOverflowException class with a specified error message.

StackOverflowException(String, Exception) StackOverflowException(String, Exception) StackOverflowException(String, Exception) StackOverflowException(String, Exception)

Inicializuje novou instanci třídy StackOverflowException třídy pomocí zadané chybové zprávy a odkazu na vnitřní výjimku, která je příčinou této výjimky.Initializes a new instance of the StackOverflowException class with a specified error message and a reference to the inner exception that is the cause of this exception.

Vlastnosti

Data Data Data Data

Získá kolekci párů klíč/hodnota, které poskytují další uživatelsky definované informace o výjimce.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Inherited from Exception)
HelpLink HelpLink HelpLink HelpLink

Získá nebo nastaví odkaz na soubor s nápovědě spojený s touto výjimkou.Gets or sets a link to the help file associated with this exception.

(Inherited from Exception)
HResult HResult HResult HResult

Získá nebo nastaví hodnotu HRESULT, kódované číselné hodnoty, která je přiřazena konkrétní výjimce.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Inherited from Exception)
InnerException InnerException InnerException InnerException

Exception Získá instanci, která způsobila aktuální výjimku.Gets the Exception instance that caused the current exception.

(Inherited from Exception)
Message Message Message Message

Získá zprávu s popisem aktuální výjimky.Gets a message that describes the current exception.

(Inherited from Exception)
Source Source Source Source

Získá nebo nastaví název aplikace nebo objektu, který způsobuje chybu.Gets or sets the name of the application or the object that causes the error.

(Inherited from Exception)
StackTrace StackTrace StackTrace StackTrace

Načte řetězcovou reprezentaci okamžitých snímků v zásobníku volání.Gets a string representation of the immediate frames on the call stack.

(Inherited from Exception)
TargetSite TargetSite TargetSite TargetSite

Získá metodu, která vyvolá aktuální výjimku.Gets the method that throws the current exception.

(Inherited from Exception)

Metody

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Určuje, zda se zadaný objekt rovná aktuálnímu objektu.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetBaseException() GetBaseException() GetBaseException() GetBaseException()

Při přepsání v odvozené třídě vrátí hodnotu Exception , která je hlavní příčinou jedné nebo více následných výjimek.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Inherited from Exception)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Slouží jako výchozí funkce hash.Serves as the default hash function.

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext)

Při přepsání v odvozené třídě nastaví na SerializationInfo výjimku informace o výjimce.When overridden in a derived class, sets the SerializationInfo with information about the exception.

(Inherited from Exception)
GetType() GetType() GetType() GetType()

Získá typ modulu runtime aktuální instance.Gets the runtime type of the current instance.

(Inherited from Exception)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Vytvoří Mělkou kopii aktuální Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Vytvoří a vrátí řetězcovou reprezentaci aktuální výjimky.Creates and returns a string representation of the current exception.

(Inherited from Exception)

Události

SerializeObjectState SerializeObjectState SerializeObjectState SerializeObjectState

Nastane, pokud je serializovaná výjimka pro vytvoření objektu stavu výjimky, který obsahuje Serializovaná data o výjimce.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Inherited from Exception)

Platí pro

Viz také