°Ë±¦Êé¿â > ÎÄѧÆäËûµç×ÓÊé > VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ) >

µÚ57²¿·Ö

VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ)-µÚ57²¿·Ö

С˵£º VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ) ×ÖÊý£º ÿҳ4000×Ö

°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·­Ò³£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡






¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡This¡¡is¡¡a¡¡mon¡¡problem£»¡¡and¡¡most¡¡beginning¡¡Visual¡¡Basic¡¡programmers¡¡are¡¡puzzled¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡by¡¡the¡¡overloading¡¡behavior¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Scenario¡¡6£º¡¡An¡¡Inheritance¡¡Tree¡¡That¡¡Overrides¡¡and¡¡Overloads¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡Base¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Overridable¡¡Sub¡¡Method£¨£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Base¡£Method¡¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Sub¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Class¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡215¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡7¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡AR¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡O¡¡U¡¡T¡¡¡¡¡¡CO¡¡M¡¡P¡¡O¡¡N¡¡E¡¡N¡¡TS¡¡¡¡¡¡AN¡¡D¡¡¡¡¡¡C¡¡L¡¡AS¡¡S¡¡¡¡H¡¡I¡¡E¡¡R¡¡AR¡¡C¡¡HI¡¡E¡¡S¡¡193¡¡



¡¡¡¡¡¡¡¡Class¡¡Derived1¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Inherits¡¡Base¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Overrides¡¡Sub¡¡Method£¨£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Derived1¡£Method¡¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Sub¡¡

¡¡¡¡¡¡¡¡End¡¡Class¡¡



¡¡¡¡¡¡¡¡Class¡¡Derived2¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Inherits¡¡Derived1¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Overloads¡¡Overridable¡¡Sub¡¡Method£¨£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Derived2¡£Method¡¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Sub¡¡

¡¡¡¡¡¡¡¡End¡¡Class¡¡



¡¡¡¡¡¡¡¡Class¡¡Derived3¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Inherits¡¡Derived2¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Overrides¡¡Sub¡¡Method£¨£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Derived3¡£Method¡¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Sub¡¡

¡¡¡¡¡¡¡¡End¡¡Class¡¡



¡¡¡¡¡¡¡¡Module¡¡Test¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Sub¡¡Run£¨£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡derivedCls¡¡As¡¡Derived3¡¡=¡¡new¡¡Derived3£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡baseCls¡¡As¡¡Base¡¡=¡¡derivedCls¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡derived2cls¡¡As¡¡Derived2¡¡=¡¡derivedCls¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡¡Calls¡¡Derived3¡£Method¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡derivedCls¡£Method£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡¡Calls¡¡Derived1¡£Method¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡baseCls¡£Method£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡¡Calls¡¡Derived3¡£Method¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡derived2cls¡£Method£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Sub¡¡

¡¡¡¡¡¡¡¡End¡¡Module¡¡



¡¡¡¡¡¡¡¡o¡¡¡¡Keywords¡¡used£º¡¡Overridable£»¡¡Overrides£»¡¡and¡¡Overloads¡£¡¡



¡¡¡¡¡¡¡¡o¡¡¡¡The¡¡inheritance¡¡hierarchy¡¡is¡¡saying¡¡that¡¡Derived1¡£Method£¨£©¡¡overrides¡¡the¡¡behavior¡¡of¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡Base¡£Method£¨£©¡£¡¡Derived2¡£Method£¨£©¡¡overloads¡¡the¡¡behavior¡¡of¡¡Derived1¡£Method£¨£©£»¡¡while¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡establishing¡¡a¡¡new¡¡overriding¡¡base¡¡method¡£¡¡Derived3¡£Method£¨£©¡¡overrides¡¡the¡¡behavior¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡Derived2¡£Method£¨£©£»¡¡and¡¡not¡¡Base¡£Method£¨£©¡¡£¨very¡¡important£©¡£¡¡



¡¡¡¡¡¡¡¡o¡¡¡¡When¡¡confronted¡¡with¡¡a¡¡plex¡¡inheritance¡¡hierarchy¡¡as¡¡illustrated¡¡by¡¡scenario¡¡6£»¡¡it¡¡is¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡important¡¡that¡¡you¡¡start¡¡at¡¡the¡¡base¡¡class¡¡and¡¡work¡¡up¡¡the¡¡inheritance¡¡hierarchy¡£¡¡¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡216¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

194¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡7¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡OU¡¡T¡¡¡¡¡¡CO¡¡M¡¡P¡¡O¡¡N¡¡E¡¡N¡¡TS¡¡¡¡¡¡AN¡¡D¡¡¡¡C¡¡L¡¡AS¡¡S¡¡¡¡H¡¡I¡¡E¡¡R¡¡AR¡¡C¡¡H¡¡IE¡¡S¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡More¡¡Type¡­Casting¡¡Details¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡This¡¡chapter¡¡illustrated¡¡some¡¡type¡­casting¡¡examples¡£¡¡In¡¡Visual¡¡Basic£»¡¡you¡¡have¡¡two¡¡ways¡¡to¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡type¡¡cast£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡A¡¡forced¡¡type¡¡cast£»¡¡which¡¡can¡¡also¡¡be¡¡used¡¡on¡¡value¡¡types¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡A¡¡type¡¡cast¡¡that¡¡queries¡¡if¡¡a¡¡type¡¡cast¡¡is¡¡possible¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Consider¡¡this¡¡hierarchy£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡Base¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Sub¡¡Method£¨£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Base¡£Method¡¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Sub¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Class¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡Derived¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Inherits¡¡Base¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Overloads¡¡Sub¡¡Method£¨£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Derived¡£Method¡¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Sub¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Class¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡next¡¡step¡¡is¡¡to¡¡instantiate¡¡the¡¡type¡¡Derived¡¡and¡¡cast¡¡the¡¡instance¡¡to¡¡the¡¡base¡¡type£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡derivedCls¡¡As¡¡Derived¡¡=¡¡New¡¡Derived£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡baseCls¡¡As¡¡Base¡¡=¡¡derivedCls¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡When¡¡casting¡¡from¡¡a¡¡derived¡¡type¡¡to¡¡a¡¡base¡¡class¡¡type£»¡¡a¡¡type¡¡cast¡¡is¡¡not¡¡necessary¡¡and¡¡you¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡can¡¡assume¡¡it¡¡is¡¡implied¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡A¡¡type¡¡cast¡¡is¡¡necessary¡¡when¡¡you¡¡want¡¡to¡¡cast¡¡a¡¡base¡¡class¡¡instance¡¡to¡¡a¡¡derived¡¡class¡¡instance¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Following¡¡is¡¡the¡¡source¡¡code¡¡for¡¡a¡¡forced¡¡type¡¡cast£»¡¡assuming¡¡the¡¡inheritance¡¡hierarchy¡¡from¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡previous¡¡cast¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡backToDerived¡¡As¡¡Derived¡¡=¡¡DirectCast£¨baseCls£»¡¡Derived£©¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡forced¡¡cast¡¡is¡¡the¡¡use¡¡of¡¡the¡¡method¡¡DirectCase¡£¡¡The¡¡cast¡¡is¡¡forced¡¡because¡¡a¡¡conver

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sion¡¡to¡¡the¡¡desired¡¡type¡¡will¡¡occur£»¡¡regardless¡¡if¡¡it¡¡is¡¡possible¡¡or¡¡not¡£¡¡If¡¡the¡¡cast¡¡is¡¡not¡¡possible£»¡¡a¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡cast¡¡exception¡¡is¡¡thrown¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Another¡¡way¡¡to¡¡perform¡¡a¡¡type¡¡cast¡¡is¡¡to¡¡use¡¡a¡¡query¡¡cast£»¡¡as¡¡illustrated¡¡by¡¡the¡¡following¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡code£»¡¡again¡¡assuming¡¡the¡¡inheritance¡¡hierarchy¡¡of¡¡this¡¡section¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡backToDerived¡¡As¡¡Derived¡¡=¡¡TryCast£¨baseCls£»¡¡Derived£©¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡code£»¡¡the¡¡cast¡¡involves¡¡using¡¡the¡¡TryCast¡¡method¡£¡¡This¡¡cast¡¡is¡¡a¡¡query¡¡because¡¡a¡¡cast¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡will¡¡be¡¡attempted¡£¡¡If¡¡the¡¡cast¡¡is¡¡successful£»¡¡then¡¡an¡¡instance¡¡of¡¡the¡¡type¡¡is¡¡assigned¡¡to¡¡the¡¡vari

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡able¡¡backToDerived¡£¡¡If¡¡the¡¡cast¡¡is¡¡not¡¡possible£»¡¡then¡¡backToDerived¡¡is¡¡assigned¡¡a¡¡¡¡Nothing¡¡value¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡No¡¡exception¡¡is¡¡thrown¡£¡¡This¡¡casting¡¡technique¡¡is¡¡possible¡¡only¡¡for¡¡reference¡¡types¡£¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡217¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡7¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡AR¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡O¡¡U¡¡T¡¡¡¡¡¡CO¡¡M¡¡P¡¡O¡¡N¡¡E¡¡N¡¡TS¡¡¡¡¡¡AN¡¡D¡¡¡¡¡¡C¡¡L¡¡AS¡¡S¡¡¡¡H¡¡I¡¡E¡¡R¡¡AR¡¡C¡¡HI¡¡E¡¡S¡¡195¡¡



The¡¡Important¡¡Stuff¡¡to¡¡Remember¡¡



In¡¡this¡¡chapter£»¡¡you¡¡learned¡¡about¡¡interfaces¡¡and¡¡implementations¡£¡¡Here¡¡are¡¡the¡¡key¡¡points¡¡¡¡

to¡¡remember£º¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Using¡¡interfaces¡¡is¡¡not¡¡like¡¡using¡¡inheritance¡£¡¡They¡¡are¡¡two¡¡separate¡¡designs£»¡¡even¡¡though¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡interfaces¡¡will¡¡use¡¡inheritance¡£¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Interfaces¡¡at¡¡an¡¡abstract¡¡level¡¡imply¡¡ideas¡¡of¡¡how¡¡you¡¡would¡¡like¡¡your¡¡application¡¡to¡¡work¡£¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Ideas¡¡when¡¡implemented¡¡as¡¡interfaces¡¡should¡¡be¡¡general¡¡and¡¡applicable¡¡to¡¡multiple¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡application¡¡implementations¡¡for¡¡the¡¡domain¡£¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Ideas¡¡are¡¡represented¡¡using¡¡Visual¡¡Basic¡¡interfaces¡£¡¡And¡¡interfaces¡¡are¡¡implemented¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡using¡¡classes¡¡or¡¡structures¡£¡¡But¡¡note¡¡that¡¡interfaces¡¡are¡¡reference¡¡types¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Factories¡¡are¡¡used¡¡to¡¡instantiate¡¡implementations¡¡and¡¡return¡¡an¡¡instance¡¡that¡¡imple

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ments¡¡an¡¡interface¡£¡¡Using¡¡a¡¡factory¡¡means¡¡that¡¡the¡¡user¡¡of¡¡an¡¡interface¡¡does¡¡not¡¡need¡¡to¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡know¡¡which¡¡type¡¡of¡¡implementation¡¡object¡¡is¡¡instantiated¡£¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Interfaces¡¡can¡¡be¡¡considered¡¡as¡¡facets¡¡that¡¡might¡¡be¡¡targeting¡¡a¡¡specific¡¡characteristic¡¡of¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡an¡¡implementation¡£¡¡However£»¡¡as¡¡illustrated¡¡in¡¡the¡¡previous¡¡chapter£»¡¡interfaces¡¡do¡¡not¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡expose¡¡Friend¡¡state¡¡or¡¡the¡¡¡¡Friend¡¡workings¡¡of¡¡the¡¡implementations¡£¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡ponents¡¡are¡¡a¡¡fundamental¡¡way¡¡of¡¡developing¡¡code¡¡and¡¡should¡¡be¡¡your¡¡primary¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡way¡¡of¡¡writing¡¡code¡£¡¡For¡¡the¡¡remainder¡¡of¡¡this¡¡book£»¡¡interfaces¡¡will¡¡be¡¡used¡¡whenever¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡possible¡£¡¡Take¡¡notice¡¡and¡¡try¡¡to¡¡understand¡¡what¡¡the¡¡idea¡¡behind¡¡the¡¡interface¡¡is¡£¡¡



Some¡¡Things¡¡for¡¡You¡¡to¡¡Do¡¡



The¡¡following¡¡are¡¡a¡¡couple¡¡things¡¡for¡¡you¡¡to¡¡do¡¡to¡¡apply¡¡what¡¡you¡¯ve¡¡learned¡¡in¡¡this¡¡chapter¡£¡¡



¡¡¡¡¡¡¡¡¡¡1¡£¡¡¡¡Implement¡¡your¡¡own¡¡tax¡¡system¡¡using¡¡the¡¡predefined¡¡base¡¡classes¡£¡¡¡¡



¡öNote¡¡¡¡Because¡¡of¡¡the¡¡number¡¡of¡¡possible¡¡tax¡¡systems£»¡¡I¡¡do¡¡not¡¡provide¡¡an¡¡answer¡¡for¡¡exercise¡¡1¡£¡¡If¡¡you¡¡¡¡

want¡¡me¡¡to¡¡review¡¡your¡¡answer£»¡¡please¡¡send¡¡it¡¡to¡¡me¡¡at¡¡christianhgross@gmail¡£¡£¡¡



¡¡¡¡¡¡¡¡¡¡2¡£¡¡¡¡Add¡¡functionality¡¡to¡¡the¡¡tax¡¡engine¡¯s¡¡base¡¡classes¡¡that¡¡implement¡¡the¡¡behavior¡¡of¡¡a¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡minimum¡¡tax¡­free¡¡amount¡£¡¡This¡¡means¡¡if¡¡your¡¡ine¡¡is¡¡not¡¡above¡¡the¡¡minimum¡¡tax

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡free¡¡amount£»¡¡you¡¡do¡¡not¡¡pay¡¡taxes¡£¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡218¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡219¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

C¡¡¡¡H¡¡¡¡A¡¡¡¡P¡¡¡¡T¡¡¡¡E¡¡¡¡R¡¡¡¡¡¡¡¡¡¡8¡¡



¡¡¡ö¡¡¡ö¡¡¡ö¡¡



Learning¡¡About¡¡ponent

Oriented¡¡Architecture¡¡



So¡¡far£»¡¡you¡¡have¡¡learned¡¡the¡¡essentials¡¡of¡¡Visual¡¡Basic¡£¡¡With¡¡the¡¡essentials£»¡¡you¡¡can¡¡write¡¡a¡¡¡¡

functional¡¡application¡¡that¡¡uses¡¡classes£»¡¡objects£»¡¡interfaces£»¡¡and¡¡inheritance¡£¡¡In¡¡this¡¡chapter£»¡¡¡¡

you¡¯ll¡¡learn¡¡about¡¡a¡¡Visual¡¡Basic¡¡programming¡¡technique¡¡that¡¡some¡¡developers¡¡define¡¡as¡¡structural¡£¡¡¡¡

A¡¡structural¡¡programming¡¡technique¡¡is¡¡when¡¡the¡¡code¡¡does¡¡not¡¡directly¡¡serve¡¡to¡¡solve¡¡a¡¡business¡¡¡¡

problem£»¡¡but¡¡solves¡¡a¡¡problem¡¡relating¡¡to¡¡building¡¡the¡¡application¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡Another¡¡purpose¡¡of¡¡this¡¡chapter¡¡is¡¡to¡¡give¡¡you¡¡more¡¡experience¡¡with¡¡developing¡¡ponent

oriented¡¡code¡£¡¡In¡¡particular£»¡¡you¡¯ll¡¡learn¡¡how¡¡to¡¡develop¡¡a¡¡kernel¡£¡¡Developing¡¡a¡¡kernel¡¡demon

strates¡¡the¡¡power¡¡and¡¡flexibility¡¡of¡¡the¡¡ponent¡­oriented¡¡development¡¡approach¡£¡¡You¡¡can¡¡¡¡

build¡¡a¡¡working¡¡system¡¡even¡¡though¡¡you¡¡might¡¡not¡¡know¡¡what¡¡all¡¡of¡¡the¡¡implementations¡¡are¡¡¡¡

ahead¡¡of¡¡time¡£¡¡This¡¡type¡¡of¡¡development¡¡makes¡¡it¡¡possible¡¡to¡¡modularize¡¡development£»¡¡in¡¡that¡¡¡¡

individual¡¡teams¡¡are¡¡responsible¡¡for¡¡certain¡¡interfaces¡£¡¡Then¡¡once¡¡the¡¡pieces¡¡have¡¡been¡¡imple

mented£»¡¡they¡¡are¡¡fitted¡¡together¡¡like¡¡a¡¡jigsaw¡¡puzzle¡£¡¡Of¡¡course£»¡¡interfaces¡¡and¡¡ponents¡¡do¡¡¡¡

not¡¡guarantee¡¡success£»¡¡but¡¡they¡¡do¡¡ensure¡¡one¡¡team¡¡does¡¡not¡¡need¡¡to¡¡wait¡¡for¡¡another¡¡team¡¡to¡¡¡¡

finish¡¡its¡¡code¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡To¡¡demonstrate¡¡all¡¡of¡¡these¡¡concepts£»¡¡we¡¯ll¡¡build¡¡an¡¡application¡¡that¡¡controls¡¡lighting¡¡in¡¡¡¡

buildings£»¡¡using¡¡the¡¡kernel¡¡programming¡¡approach¡£¡¡



Understanding¡¡Kernels¡¡



Imagine¡¡you¡¡are¡¡the¡¡owner¡¡of¡¡a¡¡house¡¡or¡¡mercial¡¡building£»¡¡and¡¡you¡¡want¡¡to¡¡reduce¡¡your¡¡¡¡

electricity¡¡bill¡£¡¡One¡¡way¡¡of¡¡doing¡¡that¡¡is¡¡to¡¡automate¡¡the¡¡lighting¡¡system¡¡of¡¡your¡¡building¡¡so¡¡that¡¡¡¡

lights¡¡are¡¡on¡¡when¡¡they¡¡need¡¡to¡¡be¡£¡¡What¡¡is¡¡unique¡¡about¡¡this¡¡system¡¡is¡¡that¡¡you¡¡have¡¡a¡¡controller¡¡¡¡

and¡¡the¡¡devices¡¡that¡¡are¡¡controlled¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡The¡¡controller¡¡controls¡¡devices¡¡that¡¡it¡¡does¡¡not¡¡know¡¡about¡¡ahead¡¡of¡¡time£»¡¡but¡¡fulfills¡¡a¡¡¡¡

contract¡£¡¡The¡¡lighting¡¡system¡¡is¡¡a¡¡controller£»¡¡programmatically¡¡called¡¡a¡¡kernel£»¡¡because¡¡the¡¡¡¡

rooms¡¡that¡¡it¡¡controls¡¡are¡¡not¡¡known¡¡initially¡£¡¡The¡¡rooms¡¡are¡¡known¡¡when¡¡the¡¡controller¡¡is¡¡used¡¡¡¡

to¡¡manage¡¡the¡¡lighting¡¡system¡£¡¡The¡¡kernel¡¡programming¡¡approach¡¡is¡¡one¡¡where¡¡a¡¡core¡¡of¡¡func

tionality¡¡is¡¡developed¡£¡¡The¡¡core¡¡functionality¡¡by¡¡itself¡¡does¡¡not¡¡work£»¡¡because¡¡it¡¡relies¡¡on¡¡other¡¡¡¡

pieces¡¡to¡¡perform¡¡certain¡¡tasks¡£¡¡In¡¡programming¡¡terms£»¡¡this¡¡is¡¡called¡¡developing¡¡ponents¡¡¡¡

that¡¡use¡¡interfaces¡¡and¡¡implementations¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡197¡¡

·µ»ØĿ¼ ÉÏÒ»Ò³ ÏÂÒ»Ò³ »Øµ½¶¥²¿ ÔÞ£¨0£© ²È£¨1£©

Äã¿ÉÄÜϲ»¶µÄ