°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 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£¨£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡