C#のDivideByZeroExceptionクラスとは?ゼロ除算例外の基本と使い方を解説
C#における例外は、すべてクラスとして表現されます。C#の例外クラスは、主にSystem.Exceptionクラスから直接または間接的に派生しており、代表的な派生クラスとしてはSystem.ApplicationExceptionやSystem.SystemExceptionなどが挙げられます。
System.DivideByZeroExceptionは、整数値をゼロで除算しようとした際に発生するエラーを処理するための例外クラスです。この例外はSystem.ArithmeticExceptionの派生クラスであり、プログラムの実行中にゼロ除算が行われると、共通言語ランタイム(CLR)によって自動的にスローされます。
なお、浮動小数点数(floatやdouble)の除算ではこの例外は発生せず、結果としてInfinityやNaNが返される点に注意が必要です。DivideByZeroExceptionがスローされるのは、整数型同士の除算の場合のみです。
DivideByZeroExceptionの使用例
以下のコードは、try-catch-finallyブロックを使用して、ゼロ除算によって発生した例外を捕捉する基本的な例です。
using System;
namespace ErrorHandlingApplication {
class DivNumbers {
int result;
DivNumbers() {
result = 0;
}
public void division(int num1, int num2) {
try {
result = num1 / num2;
} catch (DivideByZeroException e) {
Console.WriteLine("Exception caught: {0}", e);
} finally {
Console.WriteLine("Result: {0}", result);
}
}
static void Main(string[] args) {
DivNumbers d = new DivNumbers();
d.division(25, 0);
Console.ReadKey();
}
}
}
実行結果
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ErrorHandlingApplication.DivNumbers.division (System.Int32 num1, System.Int32 num2) [0x00000] in <a9b37148b4814c1a849bf4ee94fbe889>:0 Result: 0
コードのポイント
- tryブロック: 除算処理
num1 / num2を実行します。ここでnum2が0のため、DivideByZeroExceptionがスローされます。 - catchブロック: スローされた例外を受け取り、例外の詳細情報をコンソールに出力します。
- finallyブロック: 例外の発生有無にかかわらず必ず実行されるため、変数
resultの値が出力されます。
このようにtry-catch構文で例外を適切に捕捉することで、ゼロ除算によるプログラムの異常終了を防ぎ、安定したアプリケーションを構築できます。
-
C#のConsoleクラスとは?主要プロパティの使い方を実例付きで解説
C#のConsoleクラスは、コンソールアプリケーションにおける標準入力・標準出力・標準エラー出力の各ストリームを表すクラスです。テキストの表示や入力の読み取りだけでなく、文字色や背景色の変更、カーソル位置やサイズの制御など、コンソール操作に関するさまざまな機能が提供されています。ここでは、Consoleクラスの代表的なプロパティの使い方を、サンプルコードと実行結果とあわせて解説します。Console.CursorLeftプロパティコンソール上のカーソル位置(左端から数えた列位置)を変更するには、Console.CursorLeftプロパティを使用します。サンプルコードusing System
-
C#のクラスとは?基本構文からサンプルコードまで徹底解説
C#におけるクラスとは、データ型の「設計図(ブループリント)」に相当するものです。クラスをもとに生成された実体をオブジェクトと呼び、オブジェクトはクラスのインスタンスであるといえます。また、クラスを構成するメソッドや変数は、まとめてクラスのメンバーと呼ばれます。クラスの一般的な定義形式C#でクラスを定義する際の一般的な書式は以下のとおりです。<アクセス修飾子> class クラス名 { // メンバー変数 <アクセス修飾子> <データ型> 変数1; &