VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ)-µÚ57²¿·Ö
°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 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¡¡