C#-এ একটি এক্সেপশন (Exception) হলো প্রোগ্রাম এক্সিকিউশনের সময় সৃষ্টি হওয়া একটি সমস্যা, যেমন শূন্য দিয়ে ভাগ করার চেষ্টা। এক্সেপশন হ্যান্ডলিং চারটি কীওয়ার্ডের ওপর ভিত্তি করে তৈরি: try, catch, finally, throw।
try − এক্সেপশন সৃষ্টি করতে পারে এমন কোড ব্লক চিহ্নিত করে। এর পরে এক বা একাধিক catch ব্লক থাকে।
catch − এক্সেপশন হ্যান্ডেল করার ব্লক। নির্দিষ্ট এক্সেপশন টাইপ ক্যাচ করা যায়।
finally − এক্সেপশন হোক বা না হোক, এই ব্লকটি সবসময় এক্সিকিউট হয়। রিসোর্স ক্লিনআপের জন্য ব্যবহৃত হয়।
throw − প্রোগ্রামার ইচ্ছাকৃতভাবে এক্সেপশন থ্রো করতে এই কীওয়ার্ড ব্যবহার করে।
C# এক্সেপশন ক্লাসগুলো System.Exception ক্লাস থেকে অবহৃত। প্রধান বেস ক্লাসগুলো: System.ApplicationException এবং System.SystemException।
উদাহরণ ১: রিফ্লেকশন এন্ড এক্সেপশন হ্যান্ডলিং
using System;
using System.Reflection;
public class Demo {
public static void Main() {
Type type = typeof(Subject);
try {
FieldInfo fieldInfo = type.GetField("SubName");
MemberInfo[] info = type.GetMember("SubName");
Console.Write("Members = ");
for (int i = 0; i < info.Length; i++)
Console.WriteLine(" {0}", info[i]);
Console.WriteLine("FieldInfo = {0}", fieldInfo);
}
catch (ArgumentNullException e) {
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Subject {
public string SubName = "Science";
}
আউটপুট
Members = System.String SubName FieldInfo = System.String SubName
উদাহরণ ২: DivideByZeroException হ্যান্ডলিং
using System;
public class Demo {
int result;
Demo() {
result = 0;
}
public void division(int num1, int num2) {
try {
result = num1 / num2;
}
catch (DivideByZeroException e) {
Console.WriteLine("এক্সেপশন ক্যাচ = {0}", e);
}
finally {
Console.WriteLine("ফলাফল = {0}", result);
}
}
public static void Main(string[] args) {
Demo d = new Demo();
d.division(100, 0);
}
}
আউটপুট
এক্সেপশন ক্যাচ = System.DivideByZeroException: Attempted to divide by zero. at Demo.division(Int32 num1, Int32 num2) in d:\Windows\Temp\n0kebv45.0.cs:line 11 ফলাফল = 0
ব্যাখ্যা: দ্বিতীয় উদাহরণে শূন্য দিয়ে ভাগ করলে DivideByZeroException সৃষ্টি হয়। catch ব্লক এক্সেপশন ক্যাচ করে লগ করে, finally ব্লক নিশ্চিত করে যে ফলাফল সবসময় প্রিন্ট হয়। এটি রোবাস্ট ত্রুটি হ্যান্ডলিং নিশ্চিত করে।