C# Hashtable對(duì)象分析
C#語(yǔ)言有很多值得學(xué)習(xí)的地方,這里我們主要介紹C# Hashtable對(duì)象,包括介紹兩個(gè)object類型的對(duì)象:_processStart、_processEnd等方面。
程序中聲明了一個(gè)Hashtable類型的對(duì)象:_eventList,每一個(gè)Class1類的實(shí)體都擁有這個(gè)對(duì)象,另外還聲明了兩個(gè)object類型的對(duì)象:_processStart、_processEnd,注意!這兩個(gè)對(duì)象是static(靜態(tài))類型,也就是說(shuō),不管有多少個(gè)對(duì)象實(shí)體,都只須花費(fèi)兩個(gè)object的空間。答案是對(duì)象所占的內(nèi)存大小不同,當(dāng)用戶創(chuàng)建一個(gè)對(duì)象實(shí)體之后,此對(duì)象占用了一個(gè)C# Hashtable對(duì)象的內(nèi)存空間,在用戶設(shè)定了ProcessStart事件時(shí),此對(duì)象隨之占用了一個(gè)Hashtable元素的內(nèi)存空間,若用戶未設(shè)定事件,那么此元素的內(nèi)存空間就不會(huì)被占用,此方式可以省下不必要付出的內(nèi)存成本。再詳細(xì)點(diǎn)說(shuō),假設(shè)Class1擁有1000個(gè)事件,那么程序的做法在對(duì)象創(chuàng)建初期就會(huì)占用1000個(gè)event變量的內(nèi)存空間,而程序則要付出一個(gè)C# Hashtable對(duì)象及1000個(gè)static變量的代價(jià),當(dāng)用戶創(chuàng)建了第二個(gè)對(duì)象時(shí),程序要再次占用了1000個(gè)event變量的代價(jià),但一下程序只須占用一個(gè)C# Hashtable對(duì)象的代價(jià)
.NET Framework內(nèi)建的事件支持
- public class Component1:Component
- {
- private static object _processStart = new object();
- public event EventHandler ProcessStart
- {
- add
- {
- Events.AddHandler(_processStart,value);
- }
- remove
- {
- Events.RemoveHandler(_processStart,value);
- }
- }
- public void Process()
- {
- EventHandler handler = (EventHandler)Events[_processStart];
- if(handler != null)
- handler(this,null);
- }
- }
【編輯推薦】