日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
C#實(shí)現(xiàn)Singleton模式詳解

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

目前創(chuàng)新互聯(lián)已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、寧都網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

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

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

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

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

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

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(); //錯(cuò)誤:構(gòu)造器不可訪問(wèn)  
  21. Singleton s2 = Singleton.Instance();  
  22. if (s1.Equals(s2)) // 引用相等  
  23. Console.WriteLine("Instances are identical");  
  24. }  

網(wǎng)站標(biāo)題:C#實(shí)現(xiàn)Singleton模式詳解
網(wǎng)站地址:http://www.5511xx.com/article/dphppep.html