Tutorial C#login
Tutorial C#
pengarang:php.cn  masa kemas kini:2022-04-11 14:06:23

Pengendalian pengecualian C#



Pengecualian ialah masalah yang berlaku semasa pelaksanaan program. Pengecualian dalam C# ialah tindak balas kepada situasi khas yang berlaku semasa program berjalan, seperti percubaan untuk membahagi dengan sifar.

Pengecualian menyediakan cara untuk memindahkan kawalan program dari satu bahagian ke bahagian yang lain. Pengendalian pengecualian C# adalah berdasarkan empat kata kunci: cuba, tangkap, akhirnya dan lempar.

  • cuba: Blok percubaan mengenal pasti blok kod yang akan mencetuskan pengecualian khusus. Diikuti dengan satu atau lebih blok tangkapan.

  • tangkap: Program menangkap pengecualian melalui pengendali pengecualian. Kata kunci tangkapan menunjukkan tangkapan pengecualian.

  • akhirnya: Blok akhirnya digunakan untuk melaksanakan pernyataan yang diberikan, tidak kira sama ada pengecualian dilemparkan. Contohnya, jika anda membuka fail, fail tersebut akan ditutup tanpa mengira sama ada pengecualian berlaku.

  • lempar: Apabila masalah berlaku, atur cara membuang pengecualian. Gunakan kata kunci lontaran untuk mencapai ini.

Sintaks

Anggap blok akan membuang pengecualian dan kaedah untuk menangkap pengecualian menggunakan kata kunci cuba dan tangkap. Kod dalam blok cuba/tangkap adalah kod yang dilindungi Gunakan sintaks cuba/tangkap seperti berikut:

try
{
   // 引起异常的语句
}
catch( ExceptionName e1 )
{
   // 错误处理代码
}
catch( ExceptionName e2 )
{
   // 错误处理代码
}
catch( ExceptionName eN )
{
   // 错误处理代码
}
finally
{
   // 要执行的语句
}

Anda boleh menyenaraikan berbilang kenyataan tangkapan untuk menangkap jenis pengecualian yang berbeza sekiranya blok cuba digunakan dalam Berbilang yang berbeza. pengecualian dijana dalam kes ini.

Kelas pengecualian dalam C#

Pengecualian C# diwakili oleh kelas. Kelas pengecualian dalam C# terutamanya diperoleh secara langsung atau tidak langsung daripada kelas System.Exception. Kelas System.ApplicationException dan System.SystemException ialah kelas pengecualian yang diperoleh daripada kelas System.Exception. Kelas

System.ApplicationException menyokong pengecualian yang dijana oleh aplikasi. Oleh itu, semua pengecualian yang ditakrifkan oleh pengaturcara harus diperoleh daripada kelas ini. Kelas

System.SystemException ialah kelas asas untuk semua pengecualian sistem yang dipratentukan.

Jadual berikut menyenaraikan beberapa kelas pengecualian pratakrif yang diperoleh daripada kelas Sytem.SystemException:

异常类描述
System.IO.IOException处理 I/O 错误。
System.IndexOutOfRangeException处理当方法指向超出范围的数组索引时生成的错误。
System.ArrayTypeMismatchException处理当数组类型不匹配时生成的错误。
System.NullReferenceException处理当依从一个空对象时生成的错误。
System.DivideByZeroException处理当除以零时生成的错误。
System.InvalidCastException处理在类型转换期间生成的错误。
System.OutOfMemoryException处理空闲内存不足生成的错误。
System.StackOverflowException处理栈溢出生成的错误。

Pengendalian pengecualian

C# dalam bentuk blok cuba dan tangkap Menyediakan penyelesaian pengendalian pengecualian berstruktur. Gunakan blok ini untuk memisahkan pernyataan program teras daripada kenyataan pengendalian ralat.

Blok pengendalian ralat ini dilaksanakan menggunakan kata kunci cuba, tangkap dan akhirnya. Berikut ialah contoh pengecualian yang dilemparkan apabila membahagi dengan sifar:

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();
        }
    }
}

Apabila kod di atas disusun dan dilaksanakan, ia menghasilkan keputusan berikut:

Exception caught: System.DivideByZeroException: Attempted to divide by zero. 
at ...
Result: 0

Mencipta pengecualian yang ditentukan pengguna

Anda juga boleh menentukan pengecualian anda sendiri. Kelas pengecualian yang ditakrifkan pengguna diperoleh daripada kelas ApplicationException. Contoh berikut menunjukkan ini:

using System;
namespace UserDefinedException
{
   class TestTemperature
   {
      static void Main(string[] args)
      {
         Temperature temp = new Temperature();
         try
         {
            temp.showTemp();
         }
         catch(TempIsZeroException e)
         {
            Console.WriteLine("TempIsZeroException: {0}", e.Message);
         }
         Console.ReadKey();
      }
   }
}
public class TempIsZeroException: ApplicationException
{
   public TempIsZeroException(string message): base(message)
   {
   }
}
public class Temperature
{
   int temperature = 0;
   public void showTemp()
   {
      if(temperature == 0)
      {
         throw (new TempIsZeroException("Zero Temperature found"));
      }
      else
      {
         Console.WriteLine("Temperature: {0}", temperature);
      }
   }
}

Apabila kod di atas disusun dan dilaksanakan, ia menghasilkan keputusan berikut:

TempIsZeroException: Zero Temperature found

Melempar objek

Jika pengecualian adalah Anda boleh membuang objek yang diperoleh secara langsung atau tidak langsung daripada kelas System.Exception. Anda boleh membuang objek semasa menggunakan pernyataan lontaran di dalam blok tangkapan seperti ini:

Catch(Exception e)
{
   ...
   Throw e
}

Laman web PHP Cina