次の記事では、C# StackOverflowException の概要を説明します。 StackOverflowException は、OpCodes.LocalLoc 命令と呼ばれる Microsoft Intermediate Language (MSIL) 命令によってスローされます。 StackOverflowException クラスは、StackOverflowException()、StackOverflowException(文字列メッセージ)、StackOverflowException(文字列メッセージ、例外 innerException) などを含むいくつかのメソッドを提供します。
構文:
[Serializable] public sealed class StackOverflowException : SystemException
以下に挙げる例を示します:
実行時に無限再帰が発生した場合のスタック オーバーフロー例外を示す C# プログラム。
コード:
using System; //a class called program is defined public class program { // a method called rec is defined which takes a value as parameter and increases its value by one static void Rec(int vals) { // since we have written a recursive loop and 0 is passed as a parameter, it ends in an infinite loop causing exception Console.WriteLine(vals); Rec(++vals); } //main method is called public static void Main() { //The rec method is called to start the infinite recursion Rec(0); } }
出力:
コードの try ブロックと catch ブロックを使用して例外をキャッチした後でも、実行時に無限再帰が発生した場合に StackOverflowException が発生することを示す C# プログラム。
コード:
using System; //a class called check is defined public class check { // a method called ex is defined which takes a value as parameter and increases its value by one static void ex(int equals) { Console.WriteLine(equals); ex(++equals); } //main method is called within which try and block methods are defined to catch the exception public static void Main() { try { //The ex method is called by passing zero as a parameter to start the infinite recursion ex(0); } catch (StackOverflowException ep) { Console.WriteLine(ep.Message); } } }
出力:
再帰の無限ループは、try ブロック内の ex メソッドにパラメーターとして 0 を渡すことで始まります。例外をキャッチするために catch ブロックを作成しましたが、この例外はキャッチされる catch ブロックを超えているため、この例外をキャッチできません。
以上がC# スタックオーバーフロー例外の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。