ÓÑÇéÌáʾ£ºÈç¹û±¾ÍøÒ³´ò¿ªÌ«Âý»òÏÔʾ²»ÍêÕû£¬Çë³¢ÊÔÊó±êÓÒ¼ü¡°Ë¢Ð¡±±¾ÍøÒ³£¡
VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ)-µÚ44²¿·Ö
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿! Èç¹û±¾ÊéûÓÐÔĶÁÍ꣬ÏëÏ´μÌÐø½Ó×ÅÔĶÁ£¬¿ÉʹÓÃÉÏ·½ "Êղص½ÎÒµÄä¯ÀÀÆ÷" ¹¦ÄÜ ºÍ "¼ÓÈëÊéÇ©" ¹¦ÄÜ£¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡246¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
224¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡8¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡OU¡¡T¡¡¡¡¡¡CO¡¡M¡¡P¡¡O¡¡N¡¡E¡¡N¡¡TO¡¡R¡¡IE¡¡N¡¡T¡¡E¡¡D¡¡¡¡AR¡¡C¡¡HI¡¡TE¡¡CT¡¡U¡¡R¡¡E¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡is¡¡correct¡£¡¡For¡¡example£»¡¡if¡¡¡¡LightingController¡¡indicated¡¡to¡¡turn¡¡the¡¡light¡¡off¡¡even¡¡though¡¡a¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡person¡¡is¡¡in¡¡the¡¡room£»¡¡then¡¡PublicRoom¡¡would¡¡not¡¡ask¡¡why¡¡the¡¡light¡¡is¡¡being¡¡turned¡¡off¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡öNote¡¡¡¡When¡¡you¡¡are¡¡designing¡¡a¡¡kernel¡like¡¡architecture£»¡¡the¡¡implementations¡¡are¡¡realizations¡¡of¡¡ideas¡¡and¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡should¡¡never¡¡question¡¡the¡¡controller¡£¡¡The¡¡implementations¡¡might¡¡not¡¡be¡¡aware¡¡of¡¡a¡¡bigger¡¡picture¡¡and¡¡thus¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡might¡¡prevent¡¡an¡¡algorithm¡¡from¡¡functioning¡¡properly¡£¡¡Of¡¡course£»¡¡the¡¡exception¡¡to¡¡this¡¡rule¡¡is¡¡if¡¡the¡¡decision¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡would¡¡cause¡¡physical¡¡damage¡¡or¡¡cause¡¡the¡¡program¡¡to¡¡crash¡£¡¡In¡¡that¡¡case£»¡¡the¡¡implementation¡¡should¡¡throw¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡an¡¡exception£»¡¡indicating¡¡that¡¡the¡¡decision¡¡is¡¡faulty¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Instantiating¡¡PublicRoom¡¡and¡¡PrivateRoom¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡As¡¡described¡¡in¡¡the¡¡previous¡¡chapter£»¡¡when¡¡you¡¡are¡¡developing¡¡ponents£»¡¡you¡¡want¡¡to¡¡separate¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡interfaces¡¡from¡¡the¡¡implementations¡£¡¡This¡¡gives¡¡you¡¡the¡¡flexibility¡¡to¡¡change¡¡the¡¡imple
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mentation¡¡in¡¡an¡¡assembly¡¡without¡¡requiring¡¡the¡¡users¡¡of¡¡the¡¡assembly¡¡to¡¡repile¡¡their¡¡code¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡To¡¡instantiate¡¡the¡¡implementations£»¡¡you¡¡need¡¡a¡¡factory£»¡¡and¡¡the¡¡museum¡¡with¡¡its¡¡PrivateRoom¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡and¡¡PublicRoom¡¡implementations¡¡is¡¡no¡¡different¡£¡¡However£»¡¡a¡¡builder¡¡method¡¡that¡¡assembles¡¡a¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡building¡¡of¡¡potential¡¡PrivateRoom¡¡and¡¡¡¡PublicRoom¡¡binations¡¡will¡¡be¡¡offered¡¡with¡¡the¡¡museum¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡builder¡¡method¡¡is¡¡useful¡¡because¡¡it¡¡predefines¡¡a¡¡canned¡¡building¡¡that¡¡has¡¡all¡¡the¡¡room¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡groupings¡¡and¡¡rooms¡¡properly¡¡added¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡öNote¡¡¡¡Think¡¡of¡¡a¡¡builder¡¡method¡¡as¡¡a¡¡way¡¡of¡¡creating¡¡a¡¡predefined¡¡structure£»¡¡thus¡¡saving¡¡users¡¡from¡¡having¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡¡do¡¡that¡¡themselves¡£¡¡A¡¡builder¡¡method¡¡is¡¡only¡¡a¡¡starting¡¡point£»¡¡and¡¡you¡¡should¡¡be¡¡able¡¡to¡¡manipulate¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡structure¡¡afterward¡¡for¡¡fine¡tuning¡¡purposes¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡following¡¡is¡¡the¡¡implementation¡¡of¡¡the¡¡museum¡¡factory£»¡¡which¡¡is¡¡added¡¡to¡¡the¡¡project¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Museum¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Module¡¡FactoryRooms¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Function¡¡CreateBuilding£¨£©¡¡As¡¡LightingController¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡controller¡¡As¡¡New¡¡LightingController£¨£©¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡publicAreas¡¡As¡¡Object¡¡=¡¡_¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡controller¡£AddRoomGrouping£¨¡¨public¡¡viewing¡¡areas¡¨£©¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡privateAreas¡¡As¡¡Object¡¡=¡¡_¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡controller¡£AddRoomGrouping£¨¡¨private¡¡viewing¡¡areas¡¨£©¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡controller¡£AddRoomToGrouping£¨publicAreas£»¡¡New¡¡PublicRoom£¨£©£©¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡controller¡£AddRoomToGrouping£¨privateAreas£»¡¡New¡¡PrivateRoom£¨£©£©¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡controller¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Function¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡247¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡C¡¡H¡¡AP¡¡TE¡¡R¡¡¡¡¡¡8¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡AR¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡O¡¡U¡¡T¡¡¡¡¡¡CO¡¡M¡¡P¡¡O¡¡N¡¡E¡¡N¡¡T¡¡O¡¡R¡¡IE¡¡N¡¡TE¡¡D¡¡¡¡¡¡A¡¡R¡¡CH¡¡I¡¡TE¡¡C¡¡TU¡¡R¡¡E¡¡225¡¡
¡¡¡¡¡¡¡¡Public¡¡Function¡¡CreatePrivateRoom£¨£©¡¡As¡¡IRoom¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡New¡¡PrivateRoom£¨£©¡¡
¡¡¡¡¡¡¡¡End¡¡Function¡¡
¡¡¡¡¡¡¡¡Public¡¡Function¡¡CreatePublicRoom£¨£©¡¡As¡¡IRoom¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡New¡¡PublicRoom£¨£©¡¡
¡¡¡¡¡¡¡¡End¡¡Function¡¡
End¡¡Module¡¡
¡¡¡¡¡¡¡¡¡¡The¡¡implementation¡¡has¡¡three¡¡methods£º¡¡CreateBuilding£¨£©£»¡¡CreatePrivateRoom£¨£©£»¡¡and¡¡¡¡
CreatePublicRoom£¨£©£»¡£¡¡The¡¡fact¡¡that¡¡CreatePrivateRoom£¨£©¡¡and¡¡PrivateRoom£¨£©¡¡have¡¡similar¡¡naming¡¡is¡¡¡¡
purely¡¡coincidental¡£¡¡The¡¡method¡¡could¡¡just¡¡as¡¡well¡¡have¡¡been¡¡called¡¡CreateNonControlledRoom£¨£©¡£¡¡¡¡
The¡¡CreatePrivateRoom£¨£©¡¡and¡¡CreatePublicRoom£¨£©¡¡methods¡¡are¡¡intended¡¡to¡¡define¡¡method¡¡¡¡
identifiers¡¡that¡¡users¡¡can¡¡understand¡£¡¡What¡¡is¡¡instantiated¡¡in¡¡the¡¡method¡¡must¡¡return¡¡an¡¡IRoom¡¡¡¡
instance¡£¡¡
¡¡¡¡¡¡¡¡¡¡The¡¡CreateBuilding£¨£©¡¡method¡¡is¡¡a¡¡builder¡¡method£»¡¡and¡¡it¡¡returns¡¡a¡¡¡¡LightingController¡¡¡¡
instance¡£¡¡It¡¡is¡¡fine¡¡to¡¡return¡¡a¡¡LightingController¡¡instance£»¡¡because¡¡it¡¡is¡¡a¡¡globally¡¡defined¡¡type¡¡¡¡
and¡¡can¡¡serve¡¡as¡¡a¡¡basis¡¡for¡¡the¡¡builder¡¡method¡£¡¡In¡¡the¡¡implementation¡¡of¡¡the¡¡builder¡¡method£»¡¡¡¡
the¡¡room¡¡groupings¡¡and¡¡rooms¡¡are¡¡instantiated¡¡and¡¡added¡¡to¡¡the¡¡LightingController¡¡instance¡£¡¡¡¡
This¡¡is¡¡the¡¡work¡¡that¡¡the¡¡builder¡¡should¡¡save¡¡the¡¡end¡¡user¡£¡¡Additionally£»¡¡by¡¡providing¡¡a¡¡builder¡¡¡¡
method£»¡¡you¡¡avoid¡¡creating¡¡museum¡¡structures¡¡that¡¡have¡¡glaring¡¡errors¡¡in¡¡their¡¡structures¡£¡¡¡¡
¡öNote¡¡¡¡Factory¡¡types¡¡serve¡¡to¡¡instantiate¡¡types¡¡and¡¡define¡¡builder¡¡methods£»¡¡but¡¡can¡¡also¡¡be¡¡used¡¡to¡¡perform¡¡¡¡
generic¡¡structural¡¡operations¡£¡¡Let¡¯s¡¡say¡¡that¡¡in¡¡your¡¡museum¡¡there¡¡is¡¡a¡¡wing£»¡¡which¡¡contains¡¡three¡¡public¡¡¡¡
rooms¡¡and¡¡a¡¡private¡¡room¡£¡¡You¡¡could¡¡define¡¡a¡¡builder¡¡method¡¡that¡¡creates¡¡a¡¡wing£»¡¡and¡¡the¡¡wing¡¡is¡¡added¡¡to¡¡¡¡
an¡¡already¡¡created¡¡building¡£¡¡The¡¡general¡¡idea¡¡behind¡¡the¡¡factory¡¡type¡¡is¡¡to¡¡avoid¡¡errors¡¡and¡¡centralize¡¡repeated¡¡¡¡
instantiations¡£¡¡
Learning¡¡More¡¡About¡¡Private¡¡Classes¡¡and¡¡¡¡
Object¡¡Initialization¡¡
In¡¡this¡¡chapter£»¡¡you¡¡learned¡¡how¡¡to¡¡apply¡¡interfaces£»¡¡implementations£»¡¡and¡¡ponents¡¡in¡¡a¡¡¡¡
kernel¡type¡¡situation¡£¡¡This¡¡is¡¡very¡¡much¡¡the¡¡type¡¡of¡¡programming¡¡that¡¡you¡¡will¡¡encounter¡¡as¡¡¡¡
you¡¡continue¡¡using¡¡Visual¡¡Basic¡£¡¡Here£»¡¡I¡¡will¡¡provide¡¡a¡¡few¡¡more¡¡details¡¡about¡¡using¡¡private¡¡¡¡
classes¡¡and¡¡initializing¡¡objects¡¡with¡¡nested¡¡data¡¡types¡£¡¡
Private¡¡Classes¡¡
The¡¡RoomGrouping¡¡and¡¡Room¡¡classes¡¡are¡¡defined¡¡in¡¡the¡¡¡¡LibLightingController¡¡project¡¡and¡¡are¡¡¡¡
private¡¡to¡¡the¡¡library¡£¡¡This¡¡is¡¡because¡¡RoomGrouping¡¡and¡¡Room¡¡are¡¡classes¡¡only¡¡¡¡LightingController¡¡¡¡
needs¡¡to¡¡support¡¡its¡¡functionality¡£¡¡The¡¡declaration¡¡of¡¡each¡¡class¡¡is¡¡internal¡¡to¡¡the¡¡assembly£»¡¡¡¡
which¡¡is¡¡good£»¡¡but¡¡it¡¡still¡¡means¡¡that¡¡some¡¡developers¡¡could¡¡use¡¡the¡¡classes¡¡within¡¡the¡¡kernel¡¡¡¡
assembly¡¡for¡¡their¡¡own¡¡purposes¡£¡¡Sometimes¡¡that¡¡is¡¡a¡¡desirable¡¡feature£»¡¡sometimes¡¡it¡¡is¡¡not¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡248¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
226¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡8¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡OU¡¡T¡¡¡¡¡¡CO¡¡M¡¡P¡¡O¡¡N¡¡E¡¡N¡¡TO¡¡R¡¡IE¡¡N¡¡T¡¡E¡¡D¡¡¡¡AR¡¡C¡¡HI¡¡TE¡¡CT¡¡U¡¡R¡¡E¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡case¡¡of¡¡¡¡LightingController£»¡¡another¡¡approach¡¡is¡¡to¡¡declare¡¡the¡¡classes¡¡in¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡context¡¡of¡¡LightingController£»¡¡as¡¡follows£º¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Class¡¡LightingController¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Private¡¡Class¡¡RoomGrouping¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Class¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Private¡¡Class¡¡Room¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Class¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Class¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡Room¡¡and¡¡RoomGrouping¡¡classes¡¡are¡¡declared¡¡within¡¡the¡¡class£»¡¡and¡¡their¡¡declarations¡¡are¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Private¡£¡¡This¡¡means¡¡that¡¡only¡¡LightingController¡¡can¡¡instantiate¡¡and¡¡use¡¡the¡¡classes£»¡¡and¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡there¡¡can¡¡never¡¡be¡¡the¡¡situation¡¡where¡¡another¡¡class¡¡will¡¡instantiate¡¡the¡¡types¡£¡¡In¡¡the¡¡case¡¡of¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡LightingController£»¡¡this¡¡would¡¡have¡¡been¡¡a¡¡better¡¡solution¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Private¡¡classes¡¡are¡¡also¡¡used¡¡in¡¡the¡¡factory¡¡context¡£¡¡For¡¡example£»¡¡imagine¡¡the¡¡situation¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡where¡¡you¡¡don¡¯t¡¡ever¡¡want¡¡anyone¡¡but¡¡the¡¡factory¡¡to¡¡instantiate¡¡a¡¡room¡£¡¡A¡¡possible¡¡¡¡IRoom¡¡decla
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ration¡¡and¡¡factory¡¡could¡¡be¡¡as¡¡follows£º¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Module¡¡Factory¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Private¡¡Class¡¡MyRoom¡¡£º¡¡Implements¡¡IRoom¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Class¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Function¡¡CreateMyRoom£¨£©¡¡As¡¡IRoom¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡New¡¡MyRoom£¨£©¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Function¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Module¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡this¡¡implementation¡¡of¡¡MyRoom£»¡¡you¡¡can¡¡be¡¡sure¡¡that¡¡only¡¡Factory¡¡can¡¡ever¡¡instantiate¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡MyRoom£»¡¡and¡¡you¡¡can¡¡always¡¡be¡¡sure¡¡that¡¡the¡¡only¡¡way¡¡to¡¡manipulate¡¡MyRoom¡¡is¡¡through¡¡the¡¡IRoom¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡interface¡£¡¡All¡¡too¡¡often£»¡¡developers¡¡bee¡¡lazy¡¡and¡¡instantiate¡¡types¡¡within¡¡the¡¡assembly£»¡¡and¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡switch¡¡to¡¡the¡¡implementation¡¡type¡¡whenever¡¡the¡¡interface¡¡does¡¡not¡¡have¡¡the¡¡methods¡¡or¡¡prop
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡erties¡¡that¡¡they¡¡want¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Object¡¡Initialization¡¡with¡¡Nested¡¡Data¡¡Types¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡this¡¡chapter£»¡¡you¡¡saw¡¡how¡¡to¡¡use¡¡object¡¡initialization¡¡to¡¡assign¡¡data¡¡members¡¡in¡¡lieu¡¡of¡¡a¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡constructor¡£¡¡Object¡¡initialization¡¡also¡¡works¡¡using¡¡nested¡¡data¡¡types¡£¡¡Consider¡¡the¡¡situation¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡where¡¡a¡¡type¡¡references¡¡another¡¡type¡£¡¡Using¡¡object¡¡initialization£»¡¡you¡¡can¡¡instantiate¡¡and¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡assign¡¡multiple¡¡levels¡¡of¡¡objects¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Suppose¡¡you¡¡had¡¡this¡¡source¡¡code£º¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡MyType¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Private¡¡_dataMember¡¡As¡¡Integer¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Property¡¡DataMember£¨£©¡¡As¡¡Integer¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Get¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡_dataMember¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Get¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡249¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡C¡¡H¡¡AP¡¡TE¡¡R¡¡¡¡¡¡8¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡AR¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡O¡¡U¡¡T¡¡¡¡¡¡CO¡¡M¡¡P¡¡O¡¡N¡¡E¡¡N¡¡T¡¡O¡¡R¡¡IE¡¡N¡¡TE¡¡D¡¡¡¡¡¡A¡¡R¡¡CH¡¡I¡¡TE¡¡C¡¡TU¡¡R¡¡E¡¡227¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Set¡¡£¨ByVal¡¡value¡¡as¡¡Integer£©¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡_dataMember¡¡=¡¡value¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Set¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Property¡¡
¡¡¡¡¡¡¡¡End¡¡Class¡¡
¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡Class¡¡EmbeddedMyType¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Private¡¡_embedded¡¡As¡¡MyType¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Property¡¡MyTypeProperty£¨£©¡¡As¡¡MyType¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Get¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡_embedded¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Get¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Set¡¡£¨ByVal¡¡value¡¡As¡¡MyType£©¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡_embedded¡¡=¡¡value¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Get¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Property¡¡
¡¡¡¡¡¡¡¡End¡¡Class¡¡
¡¡¡¡¡¡¡¡¡¡The¡¡type¡¡¡¡EmbeddedMyType¡¡has¡¡a¡¡property¡¡that¡¡references¡¡MyType¡£¡¡If¡¡you¡¡were¡¡to¡¡instantiate¡¡¡¡
EmbeddedMyType£»¡¡you¡¡would¡¡probably¡¡also¡¡want¡¡to¡¡instantiate¡¡and¡¡assign¡¡the¡¡property¡¡MyType¡£¡¡¡¡
You¡¡can¡¡do¡¡that¡¡with¡¡object¡¡initialization£»¡¡like¡¡this£º¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡cls¡¡As¡¡EmbeddedMyType¡¡=¡¡_¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡New¡¡EmbeddedMyType£¨£©¡¡With¡¡£û¡¡_¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£MyTypeProperty¡¡=¡¡_¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡New¡¡MyType£¨£©¡¡With¡¡£û¡£DataMember¡¡=¡¡10£ý£ý¡¡
The¡¡Important¡¡Stuff¡¡to¡¡Remember¡¡
In¡¡this¡¡chapter£»¡¡you¡¡learned¡¡about¡¡writing¡¡a¡¡kernel£»¡¡using¡¡Visual¡¡Basic¡¡default¡¡properties£»¡¡and¡¡¡¡
the¡¡implementing¡¡enumeration¡¡functionality¡£¡¡The¡¡main¡¡items¡¡to¡¡remember¡¡are¡¡as¡¡follows£º¡¡
¡¡¡¡¡¡¡¡¡¡o¡¡A¡¡kernel¡¡is¡¡a¡¡ponent¡oriented¡¡architecture¡¡where¡¡you¡¡are¡¡not¡¡in¡¡control¡¡of¡¡certain¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡implementations¡£¡¡ponents¡¡make¡¡it¡¡possible¡¡to¡¡modularize¡¡a¡¡development¡¡process¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡so¡¡that¡¡separate¡¡teams¡¡have¡¡their¡¡own¡¡tasks¡£¡¡
¡¡¡¡¡¡¡¡¡¡o¡¡Interfaces¡¡are¡¡contracts¡¡between¡¡modules£»¡¡and¡¡you¡¡test¡¡against¡¡the¡¡interface£»¡¡not¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡implementation¡£¡¡
¡¡¡¡¡¡¡¡¡¡o¡¡Placeholder¡¡interfaces¡¡are¡¡used¡¡to¡¡make¡¡it¡¡simpler¡¡to¡¡group¡¡object¡¡instances¡£¡¡
¡¡¡¡¡¡¡¡¡¡o¡¡Default¡¡properties¡¡are¡¡structural£»¡¡and¡¡thus¡¡they¡¡serve¡¡as¡¡a¡¡tool¡¡to¡¡help¡¡you¡¡acplish¡¡a¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡task¡¡quicker¡£¡¡
¡¡¡¡¡¡¡¡¡¡o¡¡Default¡¡properties¡¡make¡¡it¡¡possible¡¡for¡¡your¡¡type¡¡to¡¡behave¡¡like¡¡an¡¡array¡£¡¡
¡¡¡¡¡¡¡¡¡¡o¡¡To¡¡iterate¡¡something¡¡that¡¡does¡¡not¡¡support¡¡iteration£»¡¡you¡¡add¡¡enumeration¡¡function
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ality£»¡¡which¡¡implies¡¡implementing¡¡the¡¡IEnumerable¡¡and¡¡¡¡IEnumerator¡¡interfaces¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡250¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
228¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡8¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡OU¡¡T¡¡¡¡¡¡CO¡¡M¡¡P¡¡O¡¡N¡¡E¡¡N¡¡TO¡¡R¡¡IE¡¡N¡¡T¡¡E¡¡D¡¡¡¡AR¡¡C¡¡HI¡¡TE¡¡CT¡¡U¡¡R¡¡E¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Some¡¡Things¡¡for¡¡You¡¡to¡¡Do¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡following¡¡are¡¡some¡¡exercises¡¡that¡¡will¡¡help¡¡you¡¡apply¡¡the¡¡concepts¡¡you¡¡learned¡¡in¡¡this¡¡chapter¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡1¡£¡¡¡¡The¡¡LightingController¡£AddRoomGrouping£¨£©¡¡method¡¡has¡¡a¡¡mistake¡£¡¡Write¡¡some¡¡tests¡¡to¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡find¡¡the¡¡error£»¡¡and¡¡then¡¡fix¡¡the¡¡code¡¡and¡¡rerun¡¡your¡¡tests¡¡to¡¡verify¡¡that¡¡the¡¡error¡¡has¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡been¡¡fixed¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2¡£¡¡¡¡The¡¡TestInsert£¨£©¡¡test¡¡method¡¡is¡¡one¡¡example¡¡of¡¡an¡¡insertion¡¡test£»¡¡but¡¡not¡¡all¡¡variations¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡have¡¡been¡¡tested¡£¡¡Write¡¡another¡¡test¡¡method¡¡that¡¡implements¡¡the¡¡remaining¡¡variation£¨s£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡that¡¡need¡¡to¡¡be¡¡tested¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡3¡£¡¡¡¡The¡¡declarations¡¡of¡¡RoomGrouping¡¡and¡¡Room¡¡are¡¡not¡¡optimal¡£¡¡Fix¡¡the¡¡declarations¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡4¡£¡¡¡¡Implement¡¡a¡¡general¡¡collection¡¡class¡¡based¡¡on¡¡the¡¡experience¡¡of¡¡using¡¡the¡¡class¡¡in¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡class¡¡LightingController¡£¡¡Hint£º¡¡look¡¡at¡¡how¡¡the¡¡linked¡¡list¡¡for¡¡Room¡¡is¡¡declared¡¡and¡¡figure¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡out¡¡a¡¡way¡¡to¡¡abstract¡¡that¡¡into¡¡some¡¡general¡¡collection¡¡class¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡5¡£¡¡¡¡When¡¡the¡¡method¡¡¡¡LightingController¡£AddRoom£¨£©¡¡is¡¡called£»¡¡the¡¡method¡¡is¡¡tested¡¡internally¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡¡see¡¡if¡¡the¡¡handle¡¡is¡¡of¡¡type¡¡RoomGrouping¡£¡¡Can¡¡you¡¡think¡¡of¡¡a¡¡more¡¡defensive¡¡pro
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡gramming¡¡technique¡¡to¡¡make¡¡sure¡¡that¡¡the¡¡code¡¡someone¡¡else¡¡passes¡¡to¡¡the¡¡kernel¡¡will¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡not¡¡cause¡¡the¡¡kernel¡¡to¡¡fail£¿¡¡Hint£º¡¡think¡¡about¡¡the¡¡methods¡¡to¡¡turn¡¡on¡¡or¡¡off¡¡the¡¡lights¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡and¡¡think¡¡of¡¡what¡¡could¡¡go¡¡wrong¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡251¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
C¡¡¡¡H¡¡¡¡A¡¡¡¡P¡¡¡¡T¡¡¡¡E¡¡¡¡R¡¡¡¡¡¡¡¡¡¡9¡¡
¡ö¡¡¡ö¡¡¡ö¡¡
Learning¡¡About¡¡Lists£»¡¡Delegates£»¡¡¡¡
and¡¡Lambda¡¡Expressions¡¡¡¡
One¡¡of¡¡the¡¡most¡¡mon¡¡pieces¡¡of¡¡code¡¡that¡¡you¡¡will¡¡write¡¡is¡¡code¡¡that¡¡manages¡¡many¡¡object¡¡¡¡
instances¡£¡¡In¡¡the¡¡previous¡¡examples£»¡¡many¡¡object¡¡instances¡¡were¡¡managed¡¡using¡¡an¡¡array¡£¡¡In¡¡¡¡
Chapter¡¡8£»¡¡you¡¡learned¡¡that¡¡a¡¡linked¡¡list¡¡used¡¡in¡¡conjunction¡¡with¡¡a¡¡default¡¡property¡¡could¡¡make¡¡a¡¡¡¡
plain¡vanilla¡¡object¡¡look¡¡like¡¡a¡¡collection¡£¡¡This¡¡chapter¡¡introduces¡¡the¡¡¡¡collection¡¡classes£»¡¡¡¡
which¡¡provide¡¡an¡¡easy¡¡way¡¡to¡¡manage¡¡a¡¡set¡¡of¡¡object¡¡instances¡£¡¡Think¡¡of¡¡a¡¡collection¡¡object¡¡as¡¡¡¡
an¡¡infinite¡¡sack¡¡where¡¡things¡¡can¡¡be¡¡added£»¡¡iterated¡¡through£»¡¡and¡¡retrieved¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡The¡¡chapter¡¡begins¡¡with¡¡a¡¡discussion¡¡of¡¡how¡¡to¡¡manage¡¡collections¡£¡¡Then¡¡we¡¡will¡¡look¡¡at¡¡¡¡
different¡¡ways¡¡of¡¡iterating¡¡the¡¡data¡¡using¡¡a¡¡delegate¡£¡¡Finally£»¡¡we¡¡will¡¡look¡¡at¡¡lambda¡¡expressions¡¡¡¡
and¡¡closures¡¡to¡¡illustrate¡¡another¡¡way¡¡of¡¡processing¡¡data¡£¡¡
¡¡¡¡¡¡¡¡¡¡The¡¡project¡¡structure¡¡used¡¡in¡¡this¡¡chapter¡¡is¡¡a¡¡single¡¡console¡¡application¡£¡¡As¡¡we¡¡will¡¡not¡¡be¡¡¡¡
building¡¡an¡¡overall¡¡application£»¡¡but¡¡rather¡¡a¡¡set¡¡of¡¡sample¡¡code¡¡snippets£»¡¡no¡¡tests¡¡or¡¡libraries¡¡¡¡
are¡¡involved¡£¡¡
Managing¡¡Collections¡¡
When¡¡you¡¡have¡¡a¡¡collection£»¡¡what¡¡you¡¡actually¡¡have¡¡is¡¡an¡¡object¡¡that¡¡happens¡¡to¡¡point¡¡to¡¡many¡¡¡¡
other¡¡objects¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡Visual¡¡Basic¡¡provides¡¡collection¡¡classes¡¡for¡¡managing¡¡collections¡£¡¡Visual¡¡Basic¡¡2005¡¡intro
duced¡¡a¡¡different¡¡approach¡¡to¡¡collections£»¡¡which¡¡solved¡¡many¡¡of¡¡the¡¡problems¡¡that¡¡came¡¡up¡¡¡¡
in¡¡earlier¡¡Visual¡¡Basic¡¡versions¡£¡¡Here£»¡¡we¡¯ll¡¡look¡¡at¡¡managing¡¡collections¡¡both¡¡before¡¡and¡¡after¡¡¡¡
Visual¡¡Basic¡¡2005£»¡¡which¡¡will¡¡help¡¡you¡¡to¡¡understand¡¡how¡¡collections¡¡are¡¡used¡£¡¡¡¡
Managing¡¡a¡¡Collection¡¡Before¡¡Visual¡¡Basic¡¡2005¡¡
Before¡¡Visual¡¡Basic¡¡2005£»¡¡the¡¡main¡¡collection¡¡classes¡¡were¡¡stored¡¡in¡¡the¡¡namespace¡¡System¡£¡¡
Collections¡¡£¨and£»¡¡of¡¡course£»¡¡these¡¡classes¡¡are¡¡still¡¡available¡¡for¡¡you¡¡to¡¡use£©¡£¡¡The¡¡following¡¡are¡¡¡¡
some¡¡of¡¡the¡¡classes¡¡and¡¡interfaces¡¡in¡¡that¡¡namespace£º¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡229¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡252¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
230¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡9¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡OU¡¡T¡¡¡¡¡¡L¡¡I¡¡ST¡¡S£»¡¡¡¡¡¡D¡¡E¡¡L¡¡E¡¡G¡¡A¡¡T¡¡E¡¡S£»¡¡¡¡¡¡A¡¡N¡¡D¡¡¡¡¡¡L¡¡A¡¡M¡¡B¡¡DA¡¡¡¡¡¡E¡¡X¡¡P¡¡R¡¡E¡¡S¡¡SI¡¡ON¡¡S¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡ArrayList£º¡¡A¡¡general¡¡collection¡¡that¡¡manages¡¡all¡¡of¡¡the¡¡referenced¡¡objects¡¡using¡¡an¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡internal¡¡array¡£¡¡This¡¡class¡¡manages¡¡the¡¡problem¡¡of¡¡increasing¡¡the¡¡size¡¡of¡¡an¡¡array¡£¡¡
¡¡¡¡¡¡
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿!
ÎÂÜ°Ìáʾ£º ο´Ð¡ËµµÄͬʱ·¢±íÆÀÂÛ£¬Ëµ³ö×Ô¼ºµÄ¿´·¨ºÍÆäËüС»ï°éÃÇ·ÖÏíÒ²²»´íŶ£¡·¢±íÊéÆÀ»¹¿ÉÒÔ»ñµÃ»ý·ÖºÍ¾Ñé½±Àø£¬ÈÏÕæдԴ´ÊéÆÀ ±»²ÉÄÉΪ¾«ÆÀ¿ÉÒÔ»ñµÃ´óÁ¿½ð±Ò¡¢»ý·ÖºÍ¾Ñé½±ÀøŶ£¡