亚洲精品亚洲人成在线观看麻豆,在线欧美视频一区,亚洲国产精品一区二区动图,色综合久久丁香婷婷

              當(dāng)前位置:首頁 > IT技術(shù) > Windows編程 > 正文

              C#:異常處理
              2021-09-03 18:57:17

              ? ? ?異常是在程序執(zhí)行期間出現(xiàn)的問題。C# 中的異常是對(duì)程序運(yùn)行時(shí)出現(xiàn)的特殊情況的一種響應(yīng),比如嘗試除以零。

              異常提供了一種把程序控制權(quán)從某個(gè)部分轉(zhuǎn)移到另一個(gè)部分的方式。C# 異常處理時(shí)建立在四個(gè)關(guān)鍵詞之上的:try、catch、finally?和?throw。

              • try:一個(gè) try 塊標(biāo)識(shí)了一個(gè)將被激活的特定的異常的代碼塊。后跟一個(gè)或多個(gè) catch 塊。
              • catch:程序通過異常處理程序捕獲異常。catch 關(guān)鍵字表示異常的捕獲。
              • finally:finally 塊用于執(zhí)行給定的語句,不管異常是否被拋出都會(huì)執(zhí)行。例如,如果您打開一個(gè)文件,不管是否出現(xiàn)異常文件都要被關(guān)閉。
              • throw:當(dāng)問題出現(xiàn)時(shí),程序拋出一個(gè)異常。使用 throw 關(guān)鍵字來完成。

              語法

              假設(shè)一個(gè)塊將出現(xiàn)異常,一個(gè)方法使用 try 和 catch 關(guān)鍵字捕獲異常。try/catch 塊內(nèi)的代碼為受保護(hù)的代碼,

              使用 try/catch 語法如下所示:

              try
              {
                 // 引起異常的語句
              }
              catch( ExceptionName e1 )
              {
                 // 錯(cuò)誤處理代碼
              }
              catch( ExceptionName e2 )
              {
                 // 錯(cuò)誤處理代碼
              }
              catch( ExceptionName eN )
              {
                 // 錯(cuò)誤處理代碼
              }
              finally
              {
                 // 要執(zhí)行的語句
              }

              您可以列出多個(gè) catch 語句捕獲不同類型的異常,以防 try 塊在不同的情況下生成多個(gè)異常。

              C# 異常是使用類來表示的。C# 中的異常類主要是直接或間接地派生于?System.Exception?類。System.ApplicationException?和?System.SystemException?類是派生于 System.Exception 類的異常類。

              System.ApplicationException?類支持由應(yīng)用程序生成的異常。所以程序員定義的異常都應(yīng)派生自該類。

              System.SystemException?類是所有預(yù)定義的系統(tǒng)異常的基類。

              下表列出了一些派生自 Sytem.SystemException 類的預(yù)定義的異常類:

              異常類 描述
              System.IO.IOException 處理 I/O 錯(cuò)誤。
              System.IndexOutOfRangeException 處理當(dāng)方法指向超出范圍的數(shù)組索引時(shí)生成的錯(cuò)誤。
              System.ArrayTypeMismatchException 處理當(dāng)數(shù)組類型不匹配時(shí)生成的錯(cuò)誤。
              System.NullReferenceException 處理當(dāng)依從一個(gè)空對(duì)象時(shí)生成的錯(cuò)誤。
              System.DivideByZeroException 處理當(dāng)除以零時(shí)生成的錯(cuò)誤。
              System.InvalidCastException 處理在類型轉(zhuǎn)換期間生成的錯(cuò)誤。
              System.OutOfMemoryException 處理空閑內(nèi)存不足生成的錯(cuò)誤。
              System.StackOverflowException 處理?xiàng)R绯錾傻腻e(cuò)誤。

              異常處理

              C# 以 try 和 catch 塊的形式提供了一種結(jié)構(gòu)化的異常處理方案。使用這些塊,把核心程序語句與錯(cuò)誤處理語句分離開。

              這些錯(cuò)誤處理塊是使用?trycatch?和?finally?關(guān)鍵字實(shí)現(xiàn)的。下面是一個(gè)當(dāng)除以零時(shí)拋出異常的實(shí)例:

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

              當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

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

              創(chuàng)建用戶自定義異常

              您也可以定義自己的異常。用戶自定義的異常類是派生自?ApplicationException?類。下面的實(shí)例演示了這點(diǎn):

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

              當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

              TempIsZeroException: Zero Temperature found

              拋出對(duì)象

              如果異常是直接或間接派生自?System.Exception?類,您可以拋出一個(gè)對(duì)象。您可以在 catch 塊中使用 throw 語句來拋出當(dāng)前的對(duì)象,如下所示:

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

              ?

              本文摘自 :https://blog.51cto.com/u

              開通會(huì)員,享受整站包年服務(wù)立即開通 >