自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#實現(xiàn)Singleton模式詳解

開發(fā) 后端
這里介紹C#實現(xiàn)Singleton模式,任何編寫過MFC應(yīng)用的開發(fā)人員(不管編寫的應(yīng)用是如何的?。┒贾朗裁词荢ingleton。Singleton是類的唯一實例。

C#語言還是比較常見的東西,這里我們主要介紹C#實現(xiàn)Singleton模式,包括介紹C#不支持全局變量,但還是有可能在某個方法的一開始就在堆上創(chuàng)建了一個對象并直到很久以后才使用它。等方面。

C#實現(xiàn)Singleton模式

任何編寫過MFC應(yīng)用的開發(fā)人員(不管編寫的應(yīng)用是如何的?。┒贾朗裁词荢ingleton。Singleton是類的***實例。使用MFC時,從CWinApp派生的應(yīng)用類的全局實例就是Singleton。當(dāng)然,在MFC應(yīng)用中,盡管規(guī)定不允許創(chuàng)建應(yīng)用類的第二個實例,但是并沒有什么可以阻止你那么做。在這種情況下,當(dāng)你需要某個特定的類表現(xiàn)出Singleton行為時,一個更好的替代方案是讓這個類自己負(fù)責(zé)確保只會被創(chuàng)建一個并且只有一個實例。再回到MFC,我們知道保證應(yīng)用類實例的***性的責(zé)任被留給了開發(fā)應(yīng)用的程序員,他(她)們必須小心不要創(chuàng)建應(yīng)用類的第二個實例。

現(xiàn)在來看看下面所示的類。Singleton的訪問被局限于必須通過靜態(tài)方法Instance。多數(shù)情況下,Singleton應(yīng)該具有全局可見性,這可通過將其創(chuàng)建方法public來實現(xiàn)。和用全局變量模擬Singleton不同,這種模式可以防止創(chuàng)建出多余的實例,同時兼具全局可見性。注意,該類的構(gòu)造器被置為private,這就意味著沒有任何辦法可以繞過靜態(tài)方法Instance來直接創(chuàng)建類的實例。

  1. class Singleton  
  2. {  
  3. private static Singleton singleton = null;  
  4. public static Singleton Instance()  
  5. {  
  6. if (null == singleton)  
  7. singleton = new Singleton();  
  8. return singleton;  
  9. }  
  10. private Singleton()  
  11. {  
  12. }  

C#實現(xiàn)Singleton模式的作用還不止于此,尤其是可以將其擴展,以創(chuàng)建類的可變數(shù)量的實例。假定有一個應(yīng)用,當(dāng)需要執(zhí)行特定任務(wù)時就需要調(diào)度一個工作者線程??紤]到節(jié)約系統(tǒng)資源,我們使用Singleton來實現(xiàn)這個線程類。不久,需要Singleton線程處理的任務(wù)變得密集起來,如果我們決定擴展這個應(yīng)用,我們可以很方便地增加工作者線程的數(shù)量,因為線程的創(chuàng)建和對它們的訪問授權(quán)的所有邏輯都被定義在一個類中。

C#實現(xiàn)Singleton模式的另外一個優(yōu)點是Singleton的創(chuàng)建可以被延遲到真正需要的時候。不管是否需要,全局變量一開始就被創(chuàng)建,但這個全局對象并不一定是一直都需要的。C#不支持全局變量,但還是有可能在某個方法的一開始就在堆上創(chuàng)建了一個對象并直到很久以后才使用它。果真如此的話,Singleton模式為這種案例提供了一個優(yōu)雅的解決方案。
另外,作為一個工具,在Singleton模式的實現(xiàn)上,C#優(yōu)于C++,盡管這個優(yōu)點很微妙,但絕對重要?;贑++的實現(xiàn)需考慮Singleton帶來的一些和生命期管理有關(guān)的棘手問題,而在C#中則由運行時自動處理。這個優(yōu)點是有意義的,在Singleton模式的C#實現(xiàn)版本中,你只需保證在需要Singleton的時候,你擁有一個活的引用即可。

C#示例:

  1. using System;  
  2. class Singleton  
  3. {  
  4. private static Singleton singleton = null;  
  5. public static Singleton Instance()  
  6. {  
  7. if (null == singleton)  
  8. singleton = new Singleton();  
  9. return singleton;  
  10. }  
  11. private Singleton()  
  12. {  
  13. }  
  14. }  
  15. class Application  
  16. {  
  17. public static void Main()  
  18. {  
  19. Singleton s1 = Singleton.Instance();  
  20. //Singleton s2 = new Singleton(); //錯誤:構(gòu)造器不可訪問  
  21. Singleton s2 = Singleton.Instance();  
  22. if (s1.Equals(s2)) // 引用相等  
  23. Console.WriteLine("Instances are identical");  
  24. }  

【編輯推薦】

  1. C#使用sqlserver存儲淺析
  2. 由C++轉(zhuǎn)向C#簡單介紹
  3. C# oledbconnection方法淺談
  4. 數(shù)據(jù)庫常用C#代碼概述
  5. C#調(diào)用ImOK學(xué)習(xí)筆記
責(zé)任編輯:佚名 來源: 51cto技術(shù)博客
相關(guān)推薦

2009-08-31 16:12:02

C#使用Singlet

2009-09-02 16:23:27

C# Singleto

2009-08-31 15:48:02

C# Singleto

2009-07-08 17:25:05

Java Single

2009-09-07 05:10:52

C#模式窗體

2024-11-08 14:06:26

2009-08-04 09:22:26

C#工廠模式

2009-09-09 18:50:23

C# 加密RSA

2009-08-31 16:23:13

C#接口

2009-09-09 18:57:26

C# 加密TripleDES

2009-08-25 17:43:17

C#串口監(jiān)聽

2009-08-25 10:44:50

C#實現(xiàn)多語言

2009-08-21 10:13:02

C#異步初步

2009-08-26 09:22:44

C#實現(xiàn)打印功能

2009-08-26 11:07:36

C#打印窗體

2009-08-26 11:32:37

C#打印文檔

2009-08-26 12:59:08

C#打印設(shè)置

2009-08-10 17:41:42

C# Singleto

2009-09-03 14:55:56

C#實現(xiàn)DataGri

2009-09-09 12:55:59

C# TextBox事
點贊
收藏

51CTO技術(shù)棧公眾號