C# Hashtable對象分析
C#語言有很多值得學(xué)習(xí)的地方,這里我們主要介紹C# Hashtable對象,包括介紹兩個object類型的對象:_processStart、_processEnd等方面。
程序中聲明了一個Hashtable類型的對象:_eventList,每一個Class1類的實體都擁有這個對象,另外還聲明了兩個object類型的對象:_processStart、_processEnd,注意!這兩個對象是static(靜態(tài))類型,也就是說,不管有多少個對象實體,都只須花費兩個object的空間。答案是對象所占的內(nèi)存大小不同,當(dāng)用戶創(chuàng)建一個對象實體之后,此對象占用了一個C# Hashtable對象的內(nèi)存空間,在用戶設(shè)定了ProcessStart事件時,此對象隨之占用了一個Hashtable元素的內(nèi)存空間,若用戶未設(shè)定事件,那么此元素的內(nèi)存空間就不會被占用,此方式可以省下不必要付出的內(nèi)存成本。再詳細點說,假設(shè)Class1擁有1000個事件,那么程序的做法在對象創(chuàng)建初期就會占用1000個event變量的內(nèi)存空間,而程序則要付出一個C# Hashtable對象及1000個static變量的代價,當(dāng)用戶創(chuàng)建了第二個對象時,程序要再次占用了1000個event變量的代價,但一下程序只須占用一個C# Hashtable對象的代價
.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);
- }
- }
【編輯推薦】