StackOverflowException Klasa

Definicja

Wyjątek, który jest generowany w przypadku przepełnienia stosu wykonywania, ponieważ zawiera zbyt wiele wywołań metod zagnieżdżonych.The exception that is thrown when the execution stack overflows because it contains too many nested method calls. Klasa ta nie może być dziedziczona.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
Dziedziczenie
StackOverflowException
Atrybuty

Przykłady

Poniższy przykład używa licznika, aby upewnić się, że liczba wywołań cyklicznych do Execute metody nie przekracza maksymalnej wartości zdefiniowanej przez stałą 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

Uwagi

StackOverflowExceptionjest generowany dla błędów przepełnienia stosu wykonywania, zwykle w przypadku bardzo głębokiej lub nieograniczonej rekursji.StackOverflowException is thrown for execution stack overflow errors, typically in case of a very deep or unbounded recursion. Upewnij się, że kod nie ma pętli nieskończonej lub nieskończonej rekursji.So make sure your code doesn't have an infinite loop or infinite recursion.

StackOverflowExceptionużywa HRESULT COR_E_STACKOVERFLOW o wartości 0x800703E9.StackOverflowException uses the HRESULT COR_E_STACKOVERFLOW, which has the value 0x800703E9. Instrukcja języka StackOverflowExceptionpośredniego (IL) zgłasza. LocallocThe Localloc intermediate language (IL) instruction throws StackOverflowException. Aby uzyskać listę początkowych wartości właściwości dla StackOverflowException obiektu, StackOverflowException Zobacz konstruktory.For a list of initial property values for a StackOverflowException object, see the StackOverflowException constructors.

Począwszy od .NET Framework 2,0, StackOverflowException nie można przechwycić obiektu try / catch z blokiem, a odpowiadający proces jest domyślnie zakończony.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. W związku z tym należy napisać kod w celu wykrywania i zapobiegania przepełnieniu stosu.Consequently, you should write your code to detect and prevent a stack overflow. Na przykład jeśli aplikacja zależy od rekursji, użyj licznika lub warunku stanu, aby przerwać pętlę cykliczną.For example, if your app depends on recursion, use a counter or a state condition to terminate the recursive loop. Zapoznaj się z sekcją przykładów , aby zapoznać się z ilustracją tej techniki.See the Examples section for an illustration of this technique.

Uwaga

Zastosowanie atrybutu do metody, która zwraca wartość StackOverflowException , nie ma żadnego wpływu. HandleProcessCorruptedStateExceptionsAttributeApplying the HandleProcessCorruptedStateExceptionsAttribute attribute to a method that throws a StackOverflowException has no effect. Nadal nie można obsłużyć wyjątku z kodu użytkownika.You still cannot handle the exception from user code.

Jeśli aplikacja obsługuje środowisko uruchomieniowe języka wspólnego (CLR), może określić, że środowisko CLR ma zwolnić domenę aplikacji, w której występuje wyjątek przepełnienia stosu, i pozwolić na kontynuowanie odpowiedniego procesu.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. Aby uzyskać więcej informacji, zobacz ICLRPolicyManager Interface.For more information, see ICLRPolicyManager Interface.

Konstruktory

StackOverflowException()

Inicjuje nowe wystąpienie StackOverflowException klasy, Message ustawiając właściwość nowego wystąpienia na komunikat dostarczony przez system, który opisuje błąd, na przykład "żądana operacja spowodowała przepełnienie stosu".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." Ten komunikat uwzględnia bieżącą kulturę systemu.This message takes into account the current system culture.

StackOverflowException(String)

Inicjuje nowe wystąpienie klasy StackOverflowException klasy przy użyciu określonego komunikatu o błędzie.Initializes a new instance of the StackOverflowException class with a specified error message.

StackOverflowException(String, Exception)

Inicjuje nowe wystąpienie klasy StackOverflowException klasy przy użyciu określonego komunikatu o błędzie i odwołania do wewnętrznego wyjątku, który jest przyczyną tego wyjątku.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.

Właściwości

Data

Pobiera kolekcję par klucz/wartość, które zawierają dodatkowe informacje zdefiniowane przez użytkownika dotyczące wyjątku.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Odziedziczone po Exception)
HelpLink

Pobiera lub ustawia link do pliku pomocy skojarzonego z tym wyjątkiem.Gets or sets a link to the help file associated with this exception.

(Odziedziczone po Exception)
HResult

Pobiera lub ustawia wartość HRESULT, kodowane wartości liczbowe przypisane do określonego wyjątku.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Odziedziczone po Exception)
InnerException

Pobiera wystąpienie Exception, które spowodowało wyjątek bieżący.Gets the Exception instance that caused the current exception.

(Odziedziczone po Exception)
Message

Pobiera komunikat, który opisuje bieżący wyjątek.Gets a message that describes the current exception.

(Odziedziczone po Exception)
Source

Pobiera lub ustawia nazwę aplikacji lub obiekt, który powoduje błąd.Gets or sets the name of the application or the object that causes the error.

(Odziedziczone po Exception)
StackTrace

Pobiera ciąg reprezentujący bezpośrednie ramki w stosie wywołań.Gets a string representation of the immediate frames on the call stack.

(Odziedziczone po Exception)
TargetSite

Pobiera metodę, która zgłasza bieżący wyjątek.Gets the method that throws the current exception.

(Odziedziczone po Exception)

Metody

Equals(Object)

Określa, czy określony obiekt jest równy bieżącemu obiektowi.Determines whether the specified object is equal to the current object.

(Odziedziczone po Object)
GetBaseException()

Gdy jest zastępowany w klasie pochodnej, zwraca Exception, który jest główną przyczyną jednego lub kilku kolejnych wyjątków.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Odziedziczone po Exception)
GetHashCode()

Służy jako domyślna funkcja skrótu.Serves as the default hash function.

(Odziedziczone po Object)
GetObjectData(SerializationInfo, StreamingContext)

Gdy jest zastępowany w klasie pochodnej, ustawia SerializationInfo z informacjami o wyjątku.When overridden in a derived class, sets the SerializationInfo with information about the exception.

(Odziedziczone po Exception)
GetType()

Pobiera typ środowiska uruchomieniowego bieżącego wystąpienia.Gets the runtime type of the current instance.

(Odziedziczone po Exception)
MemberwiseClone()

Tworzy skróconą kopię bieżącego Object.Creates a shallow copy of the current Object.

(Odziedziczone po Object)
ToString()

Tworzy i zwraca reprezentację ciągu bieżącego wyjątku.Creates and returns a string representation of the current exception.

(Odziedziczone po Exception)

Zdarzenia

SerializeObjectState

Występuje, gdy wyjątek jest serializowany w celu utworzenia obiektu stanu wyjątku, który zawiera serializowane dane dotyczące wyjątku.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Odziedziczone po Exception)

Dotyczy

Zobacz też