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

µÚ148ÕÂ

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

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

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





¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡443¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡6¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡O¡¡TH¡¡E¡¡R¡¡¡¡¡¡V¡¡IS¡¡U¡¡AL¡¡¡¡¡¡B¡¡A¡¡SI¡¡C¡¡¡¡T¡¡E¡¡C¡¡HN¡¡IQ¡¡U¡¡E¡¡S¡¡421¡¡



¡¡¡¡¡¡¡¡Public¡¡ReadOnly¡¡Property¡¡Real£¨£©¡¡As¡¡Double¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Get¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡_real¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Get¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Set£¨ByVal¡¡value¡¡As¡¡Double£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡_real¡¡=¡¡value¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Set¡¡

¡¡¡¡¡¡¡¡End¡¡Property¡¡

End¡¡Class¡¡



¡¡¡¡¡¡¡¡¡¡plexType¡¡is¡¡an¡¡immutable¡¡type¡¡that¡¡has¡¡two¡¡data¡¡members¡¡representing¡¡the¡¡real¡¡and¡¡¡¡

imaginary¡¡number¡¡parts¡£¡¡

¡¡¡¡¡¡¡¡¡¡The¡¡goal¡¡is¡¡to¡¡define¡¡the¡¡£«¡¡operator¡¡so¡¡that¡¡the¡¡following¡¡code¡¡can¡¡be¡¡piled¡£¡¡



Dim¡¡a¡¡As¡¡plexType¡¡=¡¡New¡¡plexType£¨1¡£0£»¡¡10¡£0£©¡¡

Dim¡¡b¡¡As¡¡plexType¡¡=¡¡New¡¡plexType£¨2¡£0£»¡¡20¡£0£©¡¡



Dim¡¡c¡¡As¡¡plexType¡¡=¡¡a¡¡£«¡¡b¡¡



¡¡¡¡¡¡¡¡¡¡Overloading¡¡the¡¡£«¡¡operator¡¡means¡¡to¡¡add¡¡a¡¡method¡¡that¡¡has¡¡a¡¡special¡¡notation¡£¡¡The¡¡following¡¡¡¡

is¡¡the¡¡modified¡¡plexType¡¡type¡¡with¡¡the¡¡overloaded¡¡operator¡¡implemented¡¡£¨bolded£©¡£¡¡



Public¡¡NotInheritable¡¡Class¡¡plexType¡¡

¡¡¡¡¡¡¡¡Private¡¡ReadOnly¡¡_imaginary¡¡As¡¡Double¡¡

¡¡¡¡¡¡¡¡Private¡¡ReadOnly¡¡_real¡¡As¡¡Double¡¡



¡¡¡¡¡¡¡¡Public¡¡Sub¡¡New£¨ByVal¡¡real¡¡As¡¡Double£»¡¡ByVal¡¡imaginary¡¡As¡¡Double£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡_real¡¡=¡¡real¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡_imaginary¡¡=¡¡imaginary¡¡

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



¡¡¡¡¡¡¡¡Public¡¡Shared¡¡Operator¡¡£«£¨ByVal¡¡a¡¡As¡¡plexType£»¡¡ByVal¡¡b¡¡As¡¡plexType£©¡¡_¡¡

¡¡¡¡¡¡¡¡¡¡¡¡As¡¡plexType¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡New¡¡plexType£¨£¨a¡£Real¡¡£«¡¡b¡£Real£©£»¡¡£¨a¡£Imaginary¡¡£«¡¡b¡£Imaginary£©£©¡¡

¡¡¡¡¡¡¡¡End¡¡Operator¡¡



¡¡¡¡¡¡¡¡Public¡¡Overrides¡¡Function¡¡ToString£¨£©¡¡As¡¡String¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡String¡£Concat£¨New¡¡Object£¨£©¡¡£û¡¨£¨¡¨£»¡¡_real£»¡¡¡¨£©¡¡£¨¡¨£»¡¡_imaginary£»¡¡¡¨£©i¡¨£ý£©¡¡

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



¡¡¡¡¡¡¡¡Public¡¡ReadOnly¡¡Property¡¡Imaginary£¨£©¡¡As¡¡Double¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Get¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡_imaginary¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Get¡¡

¡¡¡¡¡¡¡¡End¡¡Property¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡444¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

422¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡6¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡O¡¡TH¡¡E¡¡R¡¡¡¡¡¡V¡¡IS¡¡U¡¡AL¡¡¡¡¡¡B¡¡A¡¡SI¡¡C¡¡¡¡TE¡¡C¡¡H¡¡N¡¡IQ¡¡U¡¡E¡¡S¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡ReadOnly¡¡Property¡¡Real£¨£©¡¡As¡¡Double¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Get¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡_real¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Get¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Property¡¡



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



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡declaration¡¡of¡¡the¡¡overloaded¡¡operator¡¡is¡¡a¡¡specially¡¡defined¡¡function£»¡¡which¡¡follows¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡these¡¡rules£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡The¡¡method¡¡is¡¡always¡¡declared¡¡as¡¡Shared¡¡in¡¡the¡¡context¡¡of¡¡the¡¡type¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡The¡¡method¡¡has¡¡a¡¡return¡¡type£»¡¡which¡¡should¡¡be¡¡the¡¡type¡¡that¡¡you¡¡want¡¡to¡¡construct¡£¡¡In¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡most¡¡cases£»¡¡it¡¡is¡¡the¡¡type¡¡of¡¡the¡¡declaration¡¡£¨except¡¡where¡¡a¡¡Boolean¡¡is¡¡required£©¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡The¡¡method¡¡identifier¡¡starts¡¡with¡¡the¡¡keyword¡¡Operator£»¡¡followed¡¡by¡¡a¡¡space£»¡¡and¡¡then¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡operator¡¡being¡¡overloaded¡¡£¨£«£»¡¡¡­£»¡¡and¡¡so¡¡on£©¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡GoTo¡¡Statement¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡GoTo¡¡statement¡¡allows¡¡you¡¡to¡¡jump¡¡from¡¡one¡¡spot¡¡in¡¡the¡¡code¡¡to¡¡another¡£¡¡In¡¡the¡¡past£»¡¡when¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡we¡¡did¡¡not¡¡have¡¡objects£»¡¡methods£»¡¡and¡¡other¡¡advanced¡¡programming¡¡constructs£»¡¡developers¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡used¡¡the¡¡GoTo¡¡statement¡¡because¡¡they¡¡had¡¡no¡¡other¡¡choice¡£¡¡Currently£»¡¡many¡¡in¡¡the¡¡software¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡industry¡¡dislike¡¡the¡¡GoTo¡¡statement¡£¡¡They¡¡think¡¡that¡¡the¡¡GoTo¡¡statement¡¡is¡¡a¡¡sign¡¡of¡¡poor¡¡program

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ming£»¡¡and¡¡that¡¡you¡¡never¡¡need¡¡to¡¡use¡¡it¡£¡¡The¡¡Channel¡¡9¡¡forum¡¡£¨http£º//channel9¡£msdn¡£/¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ShowPost¡£aspx£¿PageIndex=1&PostID=14652£©¡¡has¡¡a¡¡good¡¡discussion¡¡on¡¡the¡¡use¡¡of¡¡GoTo¡¡statements¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡this¡¡discussion£»¡¡a¡¡person¡¡who¡¡was¡¡against¡¡the¡¡GoTo¡¡statement¡¡said¡¡this£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡only¡¡possible¡¡exception¡¡would¡¡be¡¡if¡¡you¡¡are¡¡doing¡¡some¡¡sort¡¡of¡¡puter¡¡graphics¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡app£»¡¡where¡¡I¡¡would¡¡tolerate¡¡a¡¡£¨for¡¡y£©¡¡£¨for¡¡x£©¡¡nesting£»¡¡because¡¡the¡¡inner¡¡loop¡¡is¡¡likely¡¡to¡¡be¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡quite¡¡simple¡¡and¡¡the¡¡structure¡¡makes¡¡more¡¡sense¡¡as¡¡an¡¡entirety¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡So£»¡¡he¡¡would¡¡tolerate¡¡the¡¡GoTo¡¡statement¡¡in¡¡a¡¡specific¡¡situation£»¡¡and¡¡that¡¡means¡¡that¡¡one¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡can¡¯t¡¡argue¡¡that¡¡GoTo¡¡is¡¡all¡¡bad¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡What¡¡I¡¡like¡¡about¡¡how¡¡Visual¡¡Basic¡¡implemented¡¡GoTo¡¡is¡¡that¡¡it¡¡is¡¡designed¡¡to¡¡solve¡¡a¡¡partic

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ular¡¡problem£»¡¡but¡¡not¡¡raise¡¡the¡¡old¡¡problems¡¡of¡¡spaghetti¡¡code¡¡making¡¡a¡¡mess¡¡of¡¡things¡£¡¡So¡¡if¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡you¡¡need¡¡to¡¡use¡¡a¡¡GoTo¡¡statement£»¡¡go¡¡ahead£»¡¡just¡¡don¡¯t¡¡use¡¡it¡¡excessively¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡One¡¡example¡¡where¡¡it¡¡is¡¡not¡¡easily¡¡possible¡¡to¡¡avoid¡¡using¡¡a¡¡GoTo¡¡statement¡¡is¡¡in¡¡the¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡following¡¡pseudo¡­code¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Do¡¡While¡¡FirstActionLoop£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Do¡¡While¡¡SecondActionLoop£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡If¡¡BreakOutOfLoops£¨£©¡¡Then¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡GoTo¡¡EXIT_ALL¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡If¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Loop¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Loop¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡EXIT_ALL£º¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡445¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡6¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡O¡¡TH¡¡E¡¡R¡¡¡¡¡¡V¡¡IS¡¡U¡¡AL¡¡¡¡¡¡B¡¡A¡¡SI¡¡C¡¡¡¡T¡¡E¡¡C¡¡HN¡¡IQ¡¡U¡¡E¡¡S¡¡423¡¡



¡¡¡¡¡¡¡¡¡¡This¡¡code¡¡has¡¡two¡¡loops¡£¡¡If¡¡the¡¡code¡¡is¡¡executing¡¡the¡¡second¡¡loop¡¡and¡¡decides¡¡to¡¡end¡¡pro

cessing£»¡¡then¡¡exiting¡¡the¡¡loop¡¡bees¡¡a¡¡bit¡¡tricky£»¡¡as¡¡you¡¡can¡¡break¡¡execution¡¡only¡¡one¡¡loop¡¡at¡¡a¡¡¡¡

time¡¡using¡¡the¡¡¡¡Exit¡¡Do¡¡statement¡£¡¡Thus£»¡¡one¡¡solution¡¡is¡¡to¡¡use¡¡the¡¡GoTo¡¡statement£»¡¡as¡¡shown¡£¡¡

¡¡¡¡¡¡¡¡¡¡The¡¡GoTo¡¡statement¡¡is¡¡associated¡¡with¡¡an¡¡identifier¡¡that¡¡represents¡¡a¡¡label¡£¡¡The¡¡label¡¡can¡¡be¡¡¡¡

placed¡¡almost¡¡anywhere¡¡in¡¡the¡¡declared¡¡method¡£¡¡An¡¡exception¡¡is¡¡that¡¡you¡¡can¡¯t¡¡place¡¡a¡¡label¡¡in¡¡¡¡

a¡¡Select¡¡statement¡£¡¡However£»¡¡you¡¡can¡¡place¡¡the¡¡label¡¡before¡¡or¡¡after¡¡the¡¡GoTo¡¡keyword¡£¡¡



¡¡Generics¡¡Constraints¡¡



¡¡generics¡¡have¡¡been¡¡covered¡¡in¡¡several¡¡chapters¡£¡¡An¡¡additional¡¡aspect¡¡of¡¡¡¡generics¡¡is¡¡¡¡

constraints£»¡¡which¡¡can¡¡be¡¡optionally¡¡used¡¡to¡¡optimize¡¡programming¡£¡¡Constraints¡¡limit¡¡the¡¡types¡¡¡¡

that¡¡the¡¡parameter¡¡can¡¡be¡£¡¡

¡¡¡¡¡¡¡¡¡¡Three¡¡types¡¡of¡¡constraints¡¡are¡¡Class£»¡¡New£»¡¡and¡¡a¡¡specific¡¡type¡£¡¡As¡¡a¡¡general¡¡rule£»¡¡a¡¡constraint¡¡¡¡

is¡¡added¡¡in¡¡the¡¡form¡¡of¡¡an¡¡As¡¡statement£»¡¡as¡¡follows£º¡¡



Class¡¡Example£¨Of¡¡DataType¡¡As¡¡£ûNew£ý£©¡¡

End¡¡Class¡¡



¡¡¡¡¡¡¡¡¡¡This¡¡example¡¡limits¡¡DataType¡¡to¡¡types¡¡that¡¡have¡¡a¡¡default¡¡constructor¡£¡¡



Using¡¡the¡¡Type¡¡Constraint¡¡



Type¡¡constraints¡¡allow¡¡you¡¡to¡¡associate¡¡a¡¡minimal¡¡type¡¡with¡¡the¡¡¡¡generics¡¡parameter¡£¡¡For¡¡¡¡

example£»¡¡suppose¡¡this¡¡interface¡¡is¡¡defined£º¡¡



¡¡¡¡¡¡¡¡Interface¡¡IExample¡¡¡¡

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

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



¡¡¡¡¡¡¡¡¡¡Adding¡¡an¡¡¡¡IExample¡¡constraint¡¡to¡¡the¡¡¡¡generics¡¡parameter¡¡allows¡¡you¡¡to¡¡define¡¡a¡¡class¡¡¡¡

as¡¡follows£º¡¡



Class¡¡ExampleMgr£¨Of¡¡DataType¡¡As¡¡£û¡¡IExample£ý£©¡¡¡¡

¡¡¡¡¡¡¡¡Private¡¡_inst¡¡As¡¡DataType¡¡



¡¡¡¡¡¡¡¡Public¡¡Sub¡¡New£¨ByVal¡¡inst¡¡As¡¡DataType£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡_inst¡¡=¡¡inst¡¡

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



¡¡¡¡¡¡¡¡Public¡¡Sub¡¡DoSomething£¨£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡_inst¡£Method£¨£©¡¡

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

End¡¡Class¡¡



¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡example£»¡¡the¡¡constraint¡¡of¡¡IExample¡¡allows¡¡a¡¡developer¡¡to¡¡call¡¡Method£¨£©¡£¡¡If¡¡the¡¡constraint¡¡¡¡

were¡¡not¡¡there£»¡¡the¡¡reference¡¡to¡¡Method¡¡would¡¡generate¡¡a¡¡piler¡¡error£»¡¡because¡¡Method£¨£©¡¡is¡¡¡¡

not¡¡a¡¡method¡¡of¡¡DataType¡£¡¡

¡¡¡¡¡¡¡¡¡¡But¡¡is¡¡this¡¡ability¡¡to¡¡reference¡¡a¡¡method¡¡an¡¡advantage£¿¡¡After¡¡all£»¡¡you¡¡could¡¡write¡¡the¡¡¡¡

ExampleMgr¡¡code¡¡without¡¡using¡¡¡¡generics£»¡¡like¡¡this£º¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡446¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

424¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡6¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡O¡¡TH¡¡E¡¡R¡¡¡¡¡¡V¡¡IS¡¡U¡¡AL¡¡¡¡¡¡B¡¡A¡¡SI¡¡C¡¡¡¡TE¡¡C¡¡H¡¡N¡¡IQ¡¡U¡¡E¡¡S¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡ExampleMgr¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡_inst¡¡As¡¡IExample¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Sub¡¡New£¨ByVal¡¡inst¡¡As¡¡IExample£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Me¡£_inst¡¡=¡¡inst¡¡

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



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Sub¡¡DoSomething£¨£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡_inst¡£Method£¨£©¡¡

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

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



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡¡¡generics¡¡code¡¡and¡¡the¡¡interface¡­based¡¡code¡¡do¡¡the¡¡exact¡¡same¡¡thing£»¡¡and¡¡using¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡generics¡¡offers¡¡no¡¡advantage¡¡in¡¡this¡¡example¡£¡¡But¡¡that¡¡is¡¡not¡¡always¡¡the¡¡case¡£¡¡Consider¡¡the¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡following¡¡modified¡¡example¡¡of¡¡¡¡ExampleMgr¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡ExampleMgr£¨Of¡¡DataType¡¡As¡¡£û¡¡IExample¡¡£ý£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡_inst¡¡As¡¡DataType¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Sub¡¡New£¨ByVal¡¡inst¡¡As¡¡IExample£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Me¡£_inst¡¡=¡¡CType£¨inst£»¡¡DataType£©¡¡

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



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Sub¡¡DoSomething£¨£©¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡

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

Äã¿ÉÄÜϲ»¶µÄ