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

µÚ69ÕÂ

VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ)-µÚ69ÕÂ

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

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




parameters£»¡¡as¡¡follows£º¡¡



Friend¡¡Class¡¡TaxEngine¡¡¡¡

¡¡¡¡¡¡¡¡Inherits¡¡BaseTaxEngine¡¡

¡¡¡¡¡¡¡¡Public¡¡Overrides¡¡Function¡¡CreateTaxAccount£¨£©¡¡As¡¡ITaxAccount¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡New¡¡TaxAccount£¨Province¡£Ontario£»¡¡2008£©¡¡

¡¡¡¡¡¡¡¡End¡¡Function¡¡

End¡¡Class¡¡



¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡implementation¡¡of¡¡CreateTaxAccount£¨£©£»¡¡the¡¡province¡¡Ontario¡¡and¡¡year¡¡2008¡¡are¡¡¡¡

assumed¡£¡¡Thus£»¡¡whenever¡¡TaxEngine¡¡is¡¡instantiated£»¡¡you¡¡need¡¡to¡¡make¡¡sure¡¡that¡¡the¡¡person¡¡is¡¡¡¡

in¡¡Ontario¡¡and¡¡paying¡¡taxes¡¡for¡¡the¡¡year¡¡2008¡£¡¡The¡¡implementation¡¡solves¡¡nothing¡¡and¡¡skirts¡¡¡¡

the¡¡issue¡¡of¡¡having¡¡to¡¡figure¡¡out¡¡how¡¡to¡¡deal¡¡with¡¡someone¡¡paying¡¡their¡¡taxes¡¡in¡¡British¡¡Columbia¡¡¡¡

and¡¡the¡¡year¡¡2009¡£¡¡

¡¡¡¡¡¡¡¡¡¡If¡¡you¡¡look¡¡at¡¡the¡¡implementation¡¡of¡¡TaxEngine£»¡¡you¡¡will¡¡notice¡¡it¡¡is¡¡short¡£¡¡One¡¡obvious¡¡solu

tion¡¡would¡¡be¡¡to¡¡create¡¡a¡¡TaxEngine¡¡type¡¡for¡¡each¡¡province¡¡and¡¡each¡¡year¡£¡¡Here¡¡are¡¡two¡¡examples£º¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡208¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

186¡¡¡¡¡¡¡¡¡¡¡¡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¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Friend¡¡Class¡¡Ontario2008TaxEngine¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Inherits¡¡BaseTaxEngine¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Overrides¡¡Function¡¡CreateTaxAccount£¨£©¡¡As¡¡ITaxAccount¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡New¡¡TaxAccount£¨Province¡£Ontario£»¡¡2008£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Function¡¡

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



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Friend¡¡Class¡¡BritishColumbia2009TaxEngine¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Inherits¡¡BaseTaxEngine¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Overrides¡¡Function¡¡CreateTaxAccount£¨£©¡¡As¡¡ITaxAccount¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡New¡¡TaxAccount£¨Province¡£BritishColumbia£»¡¡2009£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Function¡¡

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



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡This¡¡solution¡¡is¡¡not¡¡that¡¡bad£»¡¡because¡¡to¡¡be¡¡able¡¡to¡¡instantiate¡¡the¡¡correct¡¡tax¡¡engine£»¡¡you¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡just¡¡need¡¡to¡¡define¡¡a¡¡factory¡¡that¡¡knows¡¡which¡¡class¡¡to¡¡instantiate¡£¡¡But¡¡for¡¡the¡¡problem¡¡at¡¡hand£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡this¡¡solution¡¡is¡¡extremely¡¡tedious£»¡¡as¡¡you¡¡could¡¡end¡¡up¡¡with¡¡hundreds£»¡¡if¡¡not¡¡thousands£»¡¡of¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡TaxEngine¡¡definitions¡£¡¡You¡¡would¡¡use¡¡the¡¡specific¡¡implementation¡¡approach¡¡when¡¡you¡¡have¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡fewer¡¡than¡¡a¡¡dozen¡¡variations¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡better¡¡approach¡¡is¡¡to¡¡add¡¡an¡¡interface¡¡specific¡¡to¡¡the¡¡Canadian¡¡tax¡¡system¡£¡¡Think¡¡of¡¡it¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡as¡¡follows¡£¡¡When¡¡you¡¡are¡¡instantiating¡¡the¡¡tax¡¡engine£»¡¡you¡¡will¡¡need¡¡to¡¡know¡¡which¡¡tax¡¡system¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡¡use¡£¡¡The¡¡factory¡¡protects¡¡you¡¡from¡¡needing¡¡to¡¡know¡¡which¡¡type¡¡to¡¡instantiate£»¡¡but¡¡there¡¡is¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡nothing¡¡wrong¡¡with¡¡giving¡¡some¡¡extra¡¡information¡¡that¡¡could¡¡be¡¡used¡¡by¡¡a¡¡factory¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Thus£»¡¡the¡¡solution¡¡is¡¡to¡¡define¡¡a¡¡new¡¡interface¡¡called¡¡ICanadaTaxEngine¡£¡¡The¡¡purpose¡¡of¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ICanadaTaxEngine¡¡is¡¡to¡¡add¡¡factory¡¡methods¡¡that¡¡are¡¡used¡¡to¡¡instantiate¡¡types¡¡with¡¡parameters¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡specific¡¡to¡¡the¡¡implementation¡£¡¡Following¡¡is¡¡the¡¡definition¡¡of¡¡the¡¡ICanadaTaxEngine¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Enum¡¡Province¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Alberta¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡BritishColumbia¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Manitoba¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡NewBrunswick¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡NewfoundlandLabrador¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡NovaScotia¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Nunavut¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Ontario¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡PrinceEdwardIsland¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Quebec¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Saskatchewan¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Yukon¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Enum¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Interface¡¡ICanadaTaxEngine¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Function¡¡CreateTaxAccount£¨ByVal¡¡province¡¡As¡¡Province£»¡¡_¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ByVal¡¡year¡¡As¡¡Integer£©¡¡As¡¡ITaxAccount¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Function¡¡CreateCapitalGain£¨ByVal¡¡amount¡¡As¡¡Double£©¡¡As¡¡ITaxIne¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Interface¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡209¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡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¡¡187¡¡



¡¡¡¡¡¡¡¡¡¡The¡¡definition¡¡of¡¡ICanadaTaxEngine¡¡contains¡¡two¡¡additional¡¡methods£º¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡CreateTaxAccount£¨£©¡¡is¡¡used¡¡to¡¡instantiate¡¡a¡¡tax¡¡account¡¡specific¡¡to¡¡a¡¡province¡¡and¡¡year¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡CreateCapitalGain£¨£©¡¡is¡¡used¡¡to¡¡instantiate¡¡an¡¡ine¡¡using¡¡the¡¡Canadian¡¡capital¡¡gains¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡calculation¡£¡¡



¡¡¡¡¡¡¡¡¡¡Thus£»¡¡the¡¡implementation¡¡of¡¡TaxEngine¡¡bees¡¡the¡¡following¡£¡¡



Friend¡¡Class¡¡TaxEngine¡¡

¡¡¡¡¡¡¡¡Inherits¡¡BaseTaxEngine¡¡

¡¡¡¡¡¡¡¡Implements¡¡ICanadaTaxEngine¡¡



¡¡¡¡¡¡¡¡Public¡¡Overrides¡¡Function¡¡CreateTaxAccount£¨£©¡¡As¡¡ITaxAccount¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡New¡¡TaxAccount£¨Province¡£Ontario£»¡¡2008£©¡¡

¡¡¡¡¡¡¡¡End¡¡Function¡¡



¡¡¡¡¡¡¡¡Public¡¡Overloads¡¡Function¡¡CreateTaxAccount£¨ByVal¡¡province¡¡As¡¡Province£»¡¡_¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ByVal¡¡year¡¡As¡¡Integer£©¡¡¡¡_¡¡¡¡

¡¡¡¡¡¡¡¡As¡¡ITaxAccount¡¡_¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Implements¡¡ICanadaTaxEngine¡£CreateTaxAccount¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡New¡¡TaxAccount£¨province£»¡¡year£©¡¡

¡¡¡¡¡¡¡¡End¡¡Function¡¡



¡¡¡¡¡¡¡¡Public¡¡Function¡¡CreateCapitalGain£¨ByVal¡¡amount¡¡As¡¡Double£©¡¡As¡¡ITaxIne¡¡_¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Implements¡¡ICanadaTaxEngine¡£CreateCapitalGain¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡New¡¡TaxIne£¨amount£»¡¡0¡£50£©¡¡

¡¡¡¡¡¡¡¡End¡¡Function¡¡

End¡¡Class¡¡



¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡modified¡¡implementation¡¡of¡¡TaxEngine£»¡¡the¡¡class¡¡still¡¡derives¡¡from¡¡BaseTaxEngine£»¡¡¡¡

fulfilling¡¡the¡¡requirement¡¡of¡¡being¡¡a¡¡general¡¡tax¡¡engine¡£¡¡However£»¡¡for¡¡the¡¡additional¡¡require

ments¡¡of¡¡the¡¡Canadian¡¡tax¡¡system£»¡¡we¡¡implement¡¡the¡¡ICanadaTaxEngine¡¡interface¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡Defining¡¡a¡¡specific¡¡interface¡¡that¡¡implies¡¡a¡¡certain¡¡implementation¡¡is¡¡fine£»¡¡because¡¡the¡¡¡¡

specific¡¡interface¡¡is¡¡not¡¡bound¡¡to¡¡a¡¡certain¡¡implementation¡£¡¡The¡¡better¡¡way¡¡to¡¡understand¡¡¡¡

this¡¡implementation¡¡technique¡¡is¡¡to¡¡consider¡¡the¡¡specific¡¡interface¡¡as¡¡a¡¡characteristic¡¡that¡¡¡¡

an¡¡implementation¡¡is¡¡capable¡¡of¡¡supporting¡£¡¡This¡¡goes¡¡back¡¡to¡¡the¡¡shape¡¡example£»¡¡where¡¡a¡¡¡¡

square¡¡can¡¡support¡¡both¡¡the¡¡ISquare¡¡and¡¡IRectangle¡¡interfaces¡£¡¡¡¡



Using¡¡the¡¡Tax¡¡Engine¡¡



The¡¡last¡¡step¡¡is¡¡to¡¡use¡¡the¡¡tax¡¡engine¡¡to¡¡calculate¡¡some¡¡taxes¡£¡¡The¡¡following¡¡is¡¡an¡¡example¡¡of¡¡¡¡

calculating¡¡the¡¡taxes¡¡for¡¡Ontario¡¡in¡¡2008¡£¡¡



Dim¡¡engine¡¡As¡¡ITaxEngine¡¡=¡¡EngineCreator¡£CreateCanadianTaxEngine£¨£©¡¡

Dim¡¡canadaEngine¡¡As¡¡ICanadaTaxEngine¡¡=¡¡TryCast£¨engine£»¡¡ICanadaTaxEngine£©¡¡

Dim¡¡account¡¡As¡¡ITaxAccount¡¡=¡¡canadaEngine¡£CreateTaxAccount£¨Province¡£Ontario£»¡¡2008£©¡¡



Dim¡¡ine¡¡As¡¡ITaxIne¡¡=¡¡engine¡£CreateIne£¨100£©¡¡

Dim¡¡capitalGain¡¡As¡¡ITaxIne¡¡=¡¡canadaEngine¡£CreateCapitalGain£¨100£©¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡210¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

188¡¡¡¡¡¡¡¡¡¡¡¡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¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡account¡£AddIne£¨ine£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡account¡£AddIne£¨capitalGain£©¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡deduction¡¡As¡¡ITaxDeduction¡¡=¡¡engine¡£CreateDeduction£¨20£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡account¡£AddDeduction£¨deduction£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡taxToPay¡¡As¡¡Double¡¡=¡¡engine¡£CalculateTaxToPay£¨account£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Tax¡¡to¡¡pay¡¡£¨¡¨¡¡&¡¡taxToPay¡¡&¡¡¡¨£©¡¨£©¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Notice¡¡the¡¡definition¡¡of¡¡the¡¡variables¡¡engine¡¡and¡¡canadaEngine¡£¡¡This¡¡is¡¡fine£»¡¡because¡¡what¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡we¡¡are¡¡doing¡¡with¡¡the¡¡interfaces¡¡is¡¡choosing¡¡a¡¡characteristic¡¡that¡¡can¡¡be¡¡dynamically¡¡queried¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Learning¡¡More¡¡About¡¡Inheritance¡¡and¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Type¡¡Casting¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡This¡¡chapter¡¡introduced¡¡interfaces¡¡and¡¡ponents£»¡¡and¡¡delved¡¡deeper¡¡into¡¡inheritance¡£¡¡Here£»¡¡I¡¯ll¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡provide¡¡more¡¡details¡¡about¡¡inheritance¡¡and¡¡type¡¡casting¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡More¡¡Inheritance¡¡Details¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡this¡¡section£»¡¡I¡¡am¡¡going¡¡to¡¡clearly¡¡lay¡¡out¡¡how¡¡inheritance¡¡works¡¡in¡¡Visual¡¡Basic¡£¡¡I¡¡will¡¡present¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡examples¡¡of¡¡usage¡¡for¡¡six¡¡scenarios¡£¡¡Each¡¡example¡¡is¡¡followed¡¡by¡¡a¡¡list¡¡explaining¡¡the¡¡key¡¡points¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡¡understand¡£¡¡My¡¡goal¡¡is¡¡to¡¡illustrate¡¡all¡¡of¡¡the¡¡possible¡¡scenarios¡¡so¡¡that¡¡you¡¡have¡¡a¡¡reference¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡¡how¡¡inheritance¡¡works¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡öNote¡¡¡¡All¡¡of¡¡the¡¡examples¡¡demonstrate¡¡using¡¡methods£»¡¡but¡¡it¡¡is¡¡possible¡¡to¡¡apply¡¡the¡¡same¡¡inheritance¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡techniques¡¡using¡¡properties¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Scenario¡¡1£º¡¡Overloading¡¡Base¡¡Class¡¡Functionality¡¡



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

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

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

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

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



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

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

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Pu

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

Äã¿ÉÄÜϲ»¶µÄ