成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

巧解C#單例模式引起的自定義異常

開發 后端
今天我們將要介紹的是C#單例模式引起的自定義異常問題的解決,希望對大家有所幫助。

案例代碼

對于單例模式,C#有個簡潔的實現,采用靜態的只讀字段實現。

但是如果在單例模式構造函數中,發生了異常自定義異常,在客戶端能捕捉到嗎?

代碼下載: ConfigException為我們定義異常類,TriggerException為異常觸發類。先不要運行,猜下會捕捉到什么異常?

現實

事實上我們的自定義異常沒有沒Catch到,這是現象很隱蔽,主要是他不影響影響我們程序正常運行,只是我們費力定義的自定義異常都沒有起到任何的作用。
通常我們在單例模式的Portal工作,如果發生了異常,而如下日志記錄的異常粒度對于運維一般參考價值不大

{"“ConsoleApplication4.Singleton”的類型初始值設定項引發異常。"} [System.TypeInitializationException]: {"“ConsoleApplication4.Singleton”的類型初始值設定項引發異常。"} Data: {System.Collections.ListDictionaryInternal} HelpLink: null InnerException: {"ComplicatedCalculate 的異常"} Message: "“ConsoleApplication4.Singleton”的類型初始值設定項引發異常。" Source: "ConsoleApplication4" StackTrace: " 在 ConsoleApplication4.Program.Main(String[] args) 位置 E:\\MyStudy\\ArchitectureHOL\\ConsoleApplication4\\ConsoleApplication4\\Program.cs:行號 16" TargetSite: {Void Main(System.String[])} 解決辦法

 

還是回到經典的單例模式的實現。代碼如下: 

  1.  public class Singleton  
  2.     {  
  3.        public readonly static Singleton instance = null;  
  4.        private static object objectLock = new object();  
  5.        public int Age  
  6.        {  
  7.            get;set;  
  8.        }  
  9.        public static Singleton Instance  
  10.        {  
  11.            get 
  12.            {  
  13.                if (instance == null)  
  14.                {  
  15.                    lock (objectLock)  
  16.                    {  
  17.                        if (instance == null)  
  18.                            instance = new Singleton();  
  19.                    }  
  20.                }  
  21.                return instance;  
  22.            }  
  23.        }  
  24.  
  25.        private Singleton()  
  26.        {  
  27.            TriggerException t = new TriggerException();  
  28.            t.ComplicatedCalculate();  
  29.        }  

這樣就可以Catch到我們自定義的異常了。

原因和疑惑

為什么字采用readonly Static 方式實現單例不能捕捉到自定的異常?這個也是調用構造函數Singleton進而觸發異常的,這個我解釋不清楚,也是我寫此文的主要目的,希望有人討論指點下。但是我想以下兩點很重要 :

C#靜態只讀字段在作為動態常量在運行時賦值的時候出現異常,.Net FrameWork把他作為一個一般異常進行處理,把我們的自定義異常作為他的InnerException

C#靜態屬性在MSIL語言就是已經看作為一個方法了。所以其調用的方法異常會被Catch而返回上一級調用者。

原文鏈接:http://www.cnblogs.com/Roping/archive/2010/12/24/1915940.html

【編輯推薦】

  1. C#取整函數實例應用詳解
  2. C#單元測試的一個小故事
  3. C#單元測試概念及作用的淺析
  4. C#單元測試使用的必要性的淺析
  5. C#單元測試的運行淺析
責任編輯:彭凡 來源: 博客園
相關推薦

2021-06-17 06:52:37

C#自定義異常

2009-08-03 16:37:49

C#異常類

2009-08-05 18:01:20

C#自定義異常處理

2025-01-10 09:28:25

2024-08-02 10:21:32

C#Exception類自定義異常

2009-08-04 08:58:01

C#自定義特性

2009-08-11 09:16:00

2009-08-04 12:56:51

C#自定義事件

2009-08-03 13:34:06

自定義C#控件

2009-08-28 17:45:19

C#自定義數據

2009-08-03 13:39:46

C#自定義用戶控件

2009-09-03 15:46:57

C#自定義事件

2009-08-17 17:24:02

C#自定義消息框

2009-08-04 13:07:46

C#自定義快捷鍵

2009-08-04 13:31:35

C#自定義事件

2009-08-04 12:40:34

c#自定義事件

2009-08-12 14:53:50

C#類型轉換函數

2024-09-11 14:46:48

C#旋轉按鈕

2009-08-05 17:03:37

C#自定義控件

2009-08-04 09:56:46

C#事件處理自定義事件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 台湾a级理论片在线观看 | 91精品国产综合久久久动漫日韩 | 人人干在线视频 | 蜜月aⅴ国产精品 | 日日人人 | 狠狠色综合网站久久久久久久 | 凹凸日日摸日日碰夜夜 | 福利片在线看 | 狠狠婷婷综合久久久久久妖精 | 国产成人精品午夜视频免费 | 日本精品视频在线 | 中文字幕欧美一区 | 性做久久久久久免费观看欧美 | 在线免费观看毛片 | www.久 | 免费人成激情视频在线观看冫 | 九九热精品在线 | aaaaaaa片毛片免费观看 | 国产精品成人一区二区 | 亚洲欧美一区二区三区1000 | 久久久免费观看视频 | 欧美一级片免费看 | 精产国产伦理一二三区 | 91免费在线看 | www.久| 亚洲一区二区三区免费在线观看 | 亚洲精品一区中文字幕乱码 | 久久亚洲国产 | 亚洲福利一区 | 天天碰日日操 | 国产高清精品在线 | 伊人伊人伊人 | 不卡视频一区 | 日韩精品一区二区三区在线观看 | 欧美成人精品 | 91免费在线 | 国产在线一区二区三区 | 秋霞性生活| 亚洲精品一区在线 | 国产成人精品久久二区二区91 | 91精品国产91久久综合桃花 |