Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

ข้อยกเว้นใน C#

ภาพรวม

ข้อยกเว้น (Exception) เป็นปัญหาที่เกิดขึ้นขณะโปรแกรมทำงาน C# ใช้กลไกจัดการข้อยกเว้น 4 คีย์เวิร์ดหลัก:

  • try – บล็อกโค้ดที่อาจโยนข้อยกเว้น
  • catch – จับและจัดการข้อยกเว้น
  • finally – บล็อกที่ทำงานเสมอ (ทำความสะอาดทรัพยากร)
  • throw – โยนข้อยกเว้นขึ้นไป

คลาสข้อยกเว้นทั้งหมดสืบทอดมาจาก System.Exception โดยหลักๆ แบ่งเป็น System.ApplicationException และ System.SystemException

ตัวอย่าง 1: ใช้ Reflection พร้อม try-catch

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";
}

ผลลัพธ์ตัวอย่าง 1

Members = System.String SubName
FieldInfo = System.String SubName

ตัวอย่าง 2: การหารด้วยศูนย์พร้อม finally

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("Exception caught = {0}", e);
        }
        finally {
            Console.WriteLine("Result = {0}", result);
        }
    }
    public static void Main(string[] args) {
        Demo d = new Demo();
        d.division(100, 0);
    }
}

ผลลัพธ์ตัวอย่าง 2

Exception caught = System.DivideByZeroException: Attempted to divide by zero.
   at Demo.division(Int32 num1, Int32 num2) in d:\Windows\Temp\n0kebv45.0.cs:line 11
Result = 0

สรุป

  • ใช้ try-catch-finally เพื่อจัดการข้อผิดพลาดอย่างมีระบบ
  • finally รับประกันการทำงาน (เช่น ปิดไฟล์)
  • สามารถมีหลาย catch สำหรับข้อยกเว้นชนิดต่างๆ