【轉】編寫高品質代碼改善C#程式的157個建議——建議106:為靜態類添加靜態建構函式

來源:互聯網
上載者:User

標籤:mod   method   except   標識符   初始化   stream   存在   type   one   

 

建議106:為靜態類添加靜態建構函式

靜態類可以擁有構造方法,這就是靜態構造方法。靜態構造方法與執行個體構造方法比較有幾個自己的特點:

  • 只被執行一次,且在第一次調用類成員之前被運行時執行。
  • 代碼無法調用它,不像執行個體構造方法使用new關鍵字就可以被執行。
  • 沒有訪問標識符。
  • 不能帶任何參數。

 使用靜態構造方法的好處是,可以初始化靜態成員並捕獲在這過程中發生的異常。而使用靜態成員初始化器則不能在類型內部捕獲異常了。查看下面代碼:

        static class SampleClass        {            private static FileStream fileStream = File.Open(@"c:\temp.txt",FileMode.Open);            public static void SampleMethod(){}        }        static void Main(string[] args)        {            SampleClass.SampleMethod();            Console.ReadKey();        }

 

 如果檔案“c:\temp.txt”不存在,這段代碼將會拋出一個TypeInitializationException。比較理想的做法是,在類型SampleClass的內部對fileStream進行初始化。提供靜態構造器的SampleClass應該如下所示:

    static class SampleClass    {        private static FileStream fileStream;        static SampleClass()        {            try            {                fileStream = File.Open(@"c:\temp.txt", FileMode.Open);            }            catch (Exception ex)            {                Console.WriteLine(ex.Message);                //異常處理            }        }        public static void SampleMethod() { }    }

 

在上面的代碼中,如果類型初始化不成功,會在類型的內部處理完畢,並不會將異常拋給調用者。因為有時候調用者甚至都不知道類型需要初始化什麼內容,所以將初始化失敗的異常處理交給上層是不合理的。

對靜態參考型別的初始化應該使用靜態構造方法。但是,如果一個靜態類只有實值型別的變數,則可以放寬這種限制。

 

 

 

轉自:《編寫高品質代碼改善C#程式的157個建議》陸敏技

【轉】編寫高品質代碼改善C#程式的157個建議——建議106:為靜態類添加靜態建構函式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.