ÓÑÇéÌáʾ£ºÈç¹û±¾ÍøÒ³´ò¿ªÌ«Âý»òÏÔʾ²»ÍêÕû£¬Çë³¢ÊÔÊó±êÓÒ¼ü¡°Ë¢Ð¡±±¾ÍøÒ³£¡
VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ)-µÚ57²¿·Ö
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿! Èç¹û±¾ÊéûÓÐÔĶÁÍ꣬ÏëÏ´μÌÐø½Ó×ÅÔĶÁ£¬¿ÉʹÓÃÉÏ·½ "Êղص½ÎÒµÄä¯ÀÀÆ÷" ¹¦ÄÜ ºÍ "¼ÓÈëÊéÇ©" ¹¦ÄÜ£¡
wanted¡¡to¡¡add¡¡an¡¡element¡¡into¡¡the¡¡list¡£¡¡
If¡¡_roomGroupings¡¡Is¡¡Nothing¡¡Then¡¡
¡¡¡¡¡¡¡¡_roomGroupings¡¡=¡¡NewRoomGroup£¨£©¡¡
Else¡¡¡¡
¡¡¡¡¡¡¡¡_roomGroupings¡£Insert£¨NewRoomGroup£¨£©£©¡¡
End¡¡If¡¡
¡¡¡¡¡¡¡¡¡¡The¡¡code¡¡that¡¡uses¡¡the¡¡placeholder¡¡is¡¡shorter¡¡and¡¡simpler£»¡¡however£»¡¡it¡¡also¡¡requires¡¡a¡¡dangling¡¡¡¡
instance¡¡of¡¡RoomGrouping¡¡that¡¡has¡¡no¡¡real¡¡value¡£¡¡I¡¡chose¡¡the¡¡dangling¡¡approach¡¡because¡¡I¡¡am¡¡¡¡
making¡¡the¡¡decision¡¡that¡¡a¡¡room¡¡grouping¡¡with¡¡no¡¡identifier¡¡is¡¡the¡¡default¡¡room¡¡grouping¡£¡¡
Adding¡¡a¡¡Room¡¡Grouping¡¡
The¡¡following¡¡code¡¡adds¡¡a¡¡room¡¡grouping¡¡£¨added¡¡to¡¡the¡¡class¡¡¡¡LightingController£©¡£¡¡
¡¡¡¡¡¡¡¡Public¡¡Function¡¡AddRoomGrouping£¨ByVal¡¡description¡¡As¡¡String£©¡¡As¡¡Object¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡grouping¡¡As¡¡RoomGrouping¡¡=¡¡New¡¡RoomGrouping£¨£©¡¡_¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡With¡¡£û¡¡_¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£Description¡¡=¡¡description£»¡¡_¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£Rooms¡¡=¡¡Nothing¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡_roomGroupings¡£Insert£¨grouping£©¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡grouping¡¡
¡¡¡¡¡¡¡¡End¡¡Function¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡236¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
214¡¡¡¡¡¡¡¡¡¡¡¡¡¡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¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡To¡¡add¡¡a¡¡new¡¡room¡¡grouping£»¡¡you¡¡instantiate¡¡RoomGrouping£»¡¡assign¡¡the¡¡data¡¡members£»¡¡and¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡then¡¡call¡¡the¡¡method¡¡_roomGroupings¡£Insert£¨£©¡¡to¡¡insert¡¡the¡¡new¡¡room¡¡grouping¡¡into¡¡the¡¡linked¡¡list¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Let¡¯s¡¡look¡¡at¡¡the¡¡technique¡¡for¡¡assigning¡¡data¡¡members£»¡¡called¡¡object¡¡initialization¡£¡¡In¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡previous¡¡examples£»¡¡when¡¡an¡¡object¡¡was¡¡instantiated¡¡and¡¡we¡¡wanted¡¡to¡¡assign¡¡default¡¡values£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡we¡¡would¡¡create¡¡a¡¡constructor¡¡with¡¡the¡¡appropriate¡¡parameters¡£¡¡However£»¡¡another¡¡way¡¡is¡¡to¡¡instan
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡tiate¡¡the¡¡object¡¡and¡¡define¡¡a¡¡block¡¡that¡¡assigns¡¡the¡¡appropriate¡¡data¡¡members¡¡or¡¡properties¡£¡¡In¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡case¡¡of¡¡RoomGrouping£»¡¡there¡¡are¡¡two¡¡publicly¡¡defined¡¡data¡¡members£º¡¡Description¡¡and¡¡Rooms£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£Description¡¡=¡¡description£»¡¡_¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£Rooms¡¡=¡¡Nothing¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡Description¡¡and¡¡¡¡Rooms¡¡data¡¡members¡¡have¡¡assign¡¡access£»¡¡which¡¡is¡¡important¡¡as¡¡this¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡technique¡¡only¡¡works¡¡with¡¡properties¡¡that¡¡are¡¡not¡¡read¡only¡£¡¡To¡¡assign¡¡a¡¡data¡¡member¡¡or¡¡prop
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡erty£»¡¡after¡¡the¡¡object¡¡instantiation£»¡¡add¡¡the¡¡With¡¡keyword£»¡¡and¡¡then¡¡within¡¡curly¡¡brackets£»¡¡assign¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡each¡¡individual¡¡data¡¡member¡¡using¡¡a¡¡key/value¡¡pair£»¡¡in¡¡this¡¡form£º¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡With¡¡£û¡¡¡£Key1¡¡=¡¡value1£»¡¡¡£Key2¡¡=¡¡value2¡¡£ý¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡key¡¡represents¡¡the¡¡data¡¡member¡¡property¡¡to¡¡assign£»¡¡and¡¡the¡¡value¡¡is¡¡the¡¡data¡¡that¡¡is¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡assigned¡¡to¡¡the¡¡data¡¡member¡¡or¡¡property¡£¡¡In¡¡the¡¡form¡¡example£»¡¡the¡¡properties¡¡Key1¡¡and¡¡¡¡Key2¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡are¡¡set¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Another¡¡technique¡¡of¡¡interest¡¡in¡¡the¡¡code¡¡to¡¡add¡¡a¡¡room¡¡grouping¡¡is¡¡the¡¡definition¡¡of¡¡a¡¡data¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡handle¡¡when¡¡passing¡¡information£º¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡grouping¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡implementation¡¡of¡¡AddRoomGrouping£¨£©£»¡¡the¡¡variable¡¡grouping¡¡is¡¡assigned¡¡an¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡instance¡¡of¡¡RoomGrouping¡£¡¡The¡¡declaration¡¡of¡¡the¡¡RoomGrouping¡¡class¡¡limits¡¡its¡¡scope¡¡to¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡LibLightingSystem¡¡assembly¡¡only£»¡¡while¡¡the¡¡declaration¡¡of¡¡¡¡LightingController¡¡is¡¡public¡£¡¡If¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡method¡¡AddRoomGrouping£¨£©¡¡had¡¡attempted¡¡to¡¡return¡¡an¡¡instance¡¡of¡¡RoomGrouping£»¡¡the¡¡piler¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡would¡¡have¡¡marked¡¡this¡¡as¡¡an¡¡error£»¡¡because¡¡the¡¡scope¡¡is¡¡inconsistent¡£¡¡Assuming¡¡for¡¡the¡¡moment¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡that¡¡you¡¡did¡¡want¡¡to¡¡return¡¡an¡¡instance¡¡of¡¡RoomGrouping£»¡¡your¡¡only¡¡solution¡¡would¡¡be¡¡to¡¡declare¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡RoomGrouping¡¡as¡¡public¡£¡¡The¡¡declaration¡¡change¡¡is¡¡the¡¡wrong¡¡solution£»¡¡because¡¡RoomGrouping¡¡is¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡a¡¡class¡¡without¡¡declared¡¡methods¡¡£¨other¡¡than¡¡the¡¡base¡¡class¡¡methods£©¡¡and¡¡has¡¡public¡¡data¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡members¡£¡¡It¡¡is¡¡a¡¡class¡¡for¡¡a¡¡specific¡¡purpose¡¡and¡¡should¡¡not¡¡be¡¡shared¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Declaring¡¡RoomGrouping¡¡as¡¡public¡¡is¡¡the¡¡wrong¡¡approach£»¡¡so¡¡another¡¡solution¡¡is¡¡needed¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡You¡¡could¡¡add¡¡a¡¡counter¡¡data¡¡member¡¡to¡¡the¡¡¡¡RoomGrouping¡¡declaration¡¡and¡¡return¡¡an¡¡Integer¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡value¡¡indicating¡¡the¡¡RoomGrouping¡¡instance¡¡you¡¡are¡¡referring¡¡to¡¡in¡¡the¡¡list¡£¡¡However£»¡¡that¡¡would¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mean¡¡having¡¡access¡¡to¡¡the¡¡list¡¡somewhere£»¡¡and¡¡then¡¡needing¡¡to¡¡iterate¡¡to¡¡find¡¡the¡¡appropriate¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡RoomGrouping¡¡instance¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡solution¡¡is¡¡to¡¡declare¡¡the¡¡method¡¡as¡¡returning¡¡a¡¡type¡¡Object¡£¡¡When¡¡you¡¡use¡¡Object£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡you¡¡are¡¡defining¡¡that¡¡your¡¡method¡¡is¡¡giving¡¡you¡¡an¡¡object¡¡instance¡£¡¡The¡¡caller¡¡may¡¡or¡¡may¡¡not¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡know¡¡what¡¡the¡¡instance¡¡type¡¡is£»¡¡and¡¡in¡¡the¡¡case¡¡of¡¡AddRoomGrouping£¨£©£»¡¡it¡¡doesn¡¯t¡£¡¡But¡¡that¡¡is¡¡fine£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡because¡¡you£»¡¡as¡¡the¡¡user£»¡¡will¡¡consider¡¡the¡¡instance¡¡as¡¡a¡¡key¡¡that¡¡is¡¡managed¡¡by¡¡the¡¡class¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡LightingController¡£¡¡In¡¡technical¡¡jargon£»¡¡the¡¡object¡¡instance¡¡is¡¡a¡¡handle¡¡that¡¡you¡¡hold¡¡and¡¡pass¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡¡some¡¡other¡¡ponent¡¡that¡¡knows¡¡what¡¡to¡¡do¡¡with¡¡it¡£¡¡In¡¡the¡¡example£»¡¡it¡¡means¡¡giving¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡handle¡¡to¡¡¡¡LightingController¡¡because¡¡it¡¡knows¡¡that¡¡the¡¡handle¡¡is¡¡an¡¡instance¡¡of¡¡RoomGrouping¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡237¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡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¡¡215¡¡
¡öNote¡¡¡¡Handles¡¡were¡¡very¡¡popular¡¡in¡¡the¡¡C¡¡programming¡¡days¡¡and¡¡were¡¡consider¡¡pointers¡¡to¡¡memory¡£¡¡The¡¡¡¡
caller¡¡did¡¡not¡¡know¡¡what¡¡the¡¡pointer¡¡pointed¡¡to£»¡¡but¡¡kept¡¡using¡¡it¡¡when¡¡interacting¡¡with¡¡an¡¡API¡£¡¡These¡¡days£»¡¡¡¡
handles¡¡have¡¡lost¡¡significance¡¡as¡¡we¡¡have¡¡objects£»¡¡¡¡generics£»¡¡and¡¡other¡¡programming¡¡constructs¡£¡¡However£»¡¡at¡¡¡¡
times£»¡¡handles¡¡are¡¡very¡¡useful¡£¡¡They¡¡can¡¡help¡¡you¡¡to¡¡avoid¡¡the¡¡problem¡¡of¡¡having¡¡to¡¡expose¡¡the¡¡internal¡¡state¡¡¡¡
of¡¡your¡¡API£»¡¡while¡¡not¡¡having¡¡to¡¡maintain¡¡an¡¡object¡¡hierarchy¡¡to¡¡watch¡¡which¡¡objects¡¡are¡¡being¡¡referenced¡£¡¡
Finding¡¡a¡¡Room¡¡Grouping¡¡
When¡¡a¡¡number¡¡of¡¡room¡¡groupings¡¡have¡¡been¡¡added£»¡¡you¡¡will¡¡want¡¡to¡¡find¡¡a¡¡room¡¡grouping¡¡¡¡
with¡¡a¡¡particular¡¡description¡£¡¡As¡¡room¡¡groupings¡¡are¡¡a¡¡doubly¡¡linked¡¡list£»¡¡it¡¡means¡¡needing¡¡to¡¡¡¡
iterate¡¡the¡¡list£»¡¡as¡¡follows¡¡£¨added¡¡to¡¡¡¡LightingController£©£º¡¡
¡¡¡¡¡¡¡¡Public¡¡Function¡¡FindRoomGrouping£¨ByVal¡¡description¡¡As¡¡String£©¡¡As¡¡Object¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡curr¡¡As¡¡RoomGrouping¡¡=¡¡_roomGroupings¡£NextItem¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Do¡¡While¡¡curr¡¡IsNot¡¡Nothing¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡If¡¡curr¡£Description¡£pareTo£¨description£©¡¡=¡¡0¡¡Then¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡curr¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡If¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡curr¡¡=¡¡TryCast£¨curr¡£NextItem£»¡¡RoomGrouping£©¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Loop¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡Nothing¡¡
¡¡¡¡¡¡¡¡End¡¡Function¡¡
¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡iteration¡¡code£»¡¡the¡¡iteration¡¡is¡¡similar¡¡to¡¡the¡¡code¡¡illustrated¡¡earlier¡¡in¡¡the¡¡¡°Storing¡¡a¡¡¡¡
Collection¡¡Using¡¡a¡¡Linked¡¡List¡±¡¡section¡£¡¡The¡¡one¡¡difference¡¡is¡¡that¡¡the¡¡curr¡¡variable¡¡is¡¡of¡¡type¡¡¡¡
RoomGrouping£»¡¡and¡¡because¡¡NextItem¡¡is¡¡of¡¡type¡¡BaseLinkedListItem£»¡¡a¡¡type¡¡cast¡¡is¡¡necessary¡£¡¡¡¡
Then¡¡an¡¡iteration¡¡using¡¡a¡¡While¡¡loop¡¡is¡¡carried¡¡out£»¡¡during¡¡each¡¡iteration£»¡¡a¡¡test¡¡paring¡¡¡¡
curr¡£Description¡¡to¡¡the¡¡parameter¡¡description¡¡is¡¡made¡£¡¡If¡¡an¡¡object¡¡is¡¡found£»¡¡the¡¡handle¡¡to¡¡¡¡
the¡¡RoomGrouping¡¡is¡¡returned£»¡¡and¡¡if¡¡nothing¡¡is¡¡found£»¡¡Nothing¡¡is¡¡returned£»¡¡indicating¡¡that¡¡the¡¡¡¡
RoomGrouping¡¡could¡¡not¡¡be¡¡found¡£¡¡
¡¡¡¡¡¡¡¡¡¡This¡¡method¡¡would¡¡be¡¡used¡¡as¡¡follows£º¡¡
Dim¡¡foundHandle¡¡As¡¡Object¡¡=¡¡controller¡£FindRoomGrouping£¨¡¨description¡¨£©¡¡
¡¡¡¡¡¡¡¡¡¡Visual¡¡Basic¡¡has¡¡constructs¡¡that¡¡make¡¡it¡¡possible¡¡to¡¡convert¡¡the¡¡¡¡LightingController¡¡class¡¡¡¡
into¡¡a¡¡class¡¡that¡¡has¡¡array¡¡functionality¡£¡¡The¡¡following¡¡method¡¡in¡¡LightingController¡¡declares¡¡¡¡
array¡like¡¡functionality£»¡¡which¡¡is¡¡called¡¡a¡¡default¡¡property¡¡
Default¡¡Public¡¡ReadOnly¡¡Property¡¡Item£¨ByVal¡¡description¡¡As¡¡String£©¡¡As¡¡Object¡¡¡¡
¡¡¡¡¡¡¡¡Get¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡FindRoomGrouping£¨description£©¡¡
¡¡¡¡¡¡¡¡End¡¡Get¡¡
End¡¡Property¡¡
¡¡¡¡¡¡¡¡¡¡A¡¡Visual¡¡Basic¡¡default¡¡property¡¡is¡¡defined¡¡like¡¡a¡¡property£»¡¡except¡¡that¡¡the¡¡property¡¡is¡¡prefixed¡¡¡¡
with¡¡a¡¡Default¡¡keyword¡£¡¡The¡¡default¡¡property¡¡is¡¡named¡¡¡¡Item¡¡by¡¡convention£»¡¡and¡¡this¡¡name¡¡is¡¡¡¡
used¡¡by¡¡all¡¡¡¡collection¡¡classes¡¡for¡¡consistency¡£¡¡The¡¡implementation¡¡of¡¡a¡¡property¡¡is¡¡just¡¡like¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡238¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
216¡¡¡¡¡¡¡¡¡¡¡¡¡¡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¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡other¡¡properties¡£¡¡However£»¡¡the¡¡default¡¡property¡¡is¡¡unique¡¡in¡¡that¡¡you¡¡use¡¡it¡¡like¡¡an¡¡array¡¡refer
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ence¡£¡¡You¡¡could¡¡use¡¡the¡¡default¡¡property¡¡as¡¡follows£º¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡foundHandle¡¡As¡¡Object¡¡=¡¡controller£¨¡¨description¡¨£©¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡example£»¡¡the¡¡array¡¡index¡¡is¡¡a¡¡string¡¡and¡¡behaves¡¡more¡¡like¡¡a¡¡property¡¡bag¡£¡¡However£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡¡description¡¡were¡¡of¡¡type¡¡¡¡Integer£»¡¡then¡¡the¡¡default¡¡property¡¡would¡¡behave¡¡like¡¡an¡¡index¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡öNote¡¡¡¡Default¡¡properties¡¡are¡¡utility¡based¡¡and¡¡best¡¡added¡¡to¡¡classes¡¡that¡¡manage¡¡collections¡£¡¡In¡¡the¡¡case¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡of¡¡the¡¡LightingController£»¡¡which¡¡manages¡¡a¡¡collection¡¡of¡¡room¡¡groupings£»¡¡use¡¡of¡¡a¡¡default¡¡property¡¡is¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡appropriate¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡To¡¡find¡¡a¡¡particular¡¡room¡¡grouping£»¡¡you¡¡would¡¡use¡¡the¡¡methods¡¡or¡¡default¡¡property¡¡of¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡LightingController¡£¡¡However£»¡¡sometimes¡¡a¡¡user¡¡would¡¡like¡¡to¡¡work¡¡with¡¡all¡¡of¡¡the¡¡room¡¡group
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ings¡¡that¡¡are¡¡available¡¡and¡¡iterate¡¡over¡¡them¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡previous¡¡indexer¡¡example¡¡and¡¡the¡¡¡¡FindRoomGrouping£¨£©¡¡method¡¡returned¡¡an¡¡object¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡When¡¡you¡¡iterate¡¡the¡¡room¡¡groupings£»¡¡you¡¡don¡¯t¡¡want¡¡an¡¡object£»¡¡because¡¡you¡¡don¡¯t¡¡know¡¡what¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡object¡¡represents¡£¡¡If¡¡you¡¡call¡¡the¡¡¡¡FindRoomGrouping£¨£©¡¡method¡¡and¡¡you¡¡search¡¡based¡¡on¡¡a¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡description£»¡¡the¡¡object¡¡that¡¡is¡¡returned¡¡is¡¡cross¡referenced¡¡with¡¡the¡¡description¡£¡¡However£»¡¡if¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡you¡¡iterate¡¡using¡¡a¡¡numeric¡¡default¡¡property£»¡¡the¡¡returned¡¡object¡¡means¡¡nothing¡¡to¡¡you¡¡other¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡than¡¡being¡¡associated¡¡with¡¡a¡¡specific¡¡index¡£¡¡What¡¡you¡¡really¡¡want¡¡to¡¡know¡¡is¡¡the¡¡description¡¡of¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡each¡¡object¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡You¡¡could¡¡define¡¡a¡¡default¡¡property¡¡with¡¡a¡¡numeric¡¡value£»¡¡as¡¡in¡¡the¡¡following¡¡code£»¡¡and¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡iterate¡¡the¡¡individual¡¡elements¡¡to¡¡obtain¡¡descriptions¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Default¡¡Public¡¡ReadOnly¡¡Property¡¡Item£¨ByVal¡¡index¡¡As¡¡Integer£©¡¡As¡¡String¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Get¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£¡¡¡£¡¡¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Get¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Property¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡öNote¡¡¡¡A¡¡type¡¡can¡¡have¡¡multiple¡¡default¡¡property¡¡definitions£»¡¡but¡¡each¡¡default¡¡property¡¡definition¡¡must¡¡have¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡different¡¡array¡¡parameters¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Suppose¡¡we¡¡implemented¡¡a¡¡numeric¡¡default¡¡property¡£¡¡To¡¡iterate¡¡the¡¡individual¡¡room¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡groupings£»¡¡we¡¡would¡¡need¡¡to¡¡use¡¡the¡¡following¡¡code¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡For¡¡c1¡¡As¡¡Integer¡¡=¡¡0¡¡To¡¡controller¡£Length¡¡1¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡description¡¡As¡¡String¡¡=¡¡controller£¨c1£©¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Next¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡239¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡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¡¡217¡¡
¡¡¡¡¡¡¡¡¡¡This¡¡iteration¡¡code¡¡is¡¡acceptable¡¡and¡¡something¡¡that¡¡we¡¡could¡¡use£»¡¡but¡¡it¡¡involves¡¡adding¡¡¡¡
the¡¡property¡¡¡¡Length¡¡to¡¡the¡¡¡¡LightingController¡¡class¡£¡¡Another¡¡approach¡¡is¡¡to¡¡use¡¡¡¡For¡¡Each£»¡¡as¡¡¡¡
follows£º¡¡
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿!
ÎÂÜ°Ìáʾ£º ο´Ð¡ËµµÄͬʱ·¢±íÆÀÂÛ£¬Ëµ³ö×Ô¼ºµÄ¿´·¨ºÍÆäËüС»ï°éÃÇ·ÖÏíÒ²²»´íŶ£¡·¢±íÊéÆÀ»¹¿ÉÒÔ»ñµÃ»ý·ÖºÍ¾Ñé½±Àø£¬ÈÏÕæдԴ´ÊéÆÀ ±»²ÉÄÉΪ¾«ÆÀ¿ÉÒÔ»ñµÃ´óÁ¿½ð±Ò¡¢»ý·ÖºÍ¾Ñé½±ÀøŶ£¡