ÓÑÇéÌáʾ£ºÈç¹û±¾ÍøÒ³´ò¿ªÌ«Âý»òÏÔʾ²»ÍêÕû£¬Çë³¢ÊÔÊó±êÓÒ¼ü¡°Ë¢Ð¡±±¾ÍøÒ³£¡
¸»Ê¿¿µÐ¡ËµÍø ·µ»Ø±¾ÊéĿ¼ ¼ÓÈëÊéÇ© ÎÒµÄÊé¼Ü ÎÒµÄÊéÇ© TXTÈ«±¾ÏÂÔØ ¡ºÊղص½ÎÒµÄä¯ÀÀÆ÷¡»

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

¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·­Ò³ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿! Èç¹û±¾ÊéûÓÐÔĶÁÍ꣬ÏëÏ´μÌÐø½Ó×ÅÔĶÁ£¬¿ÉʹÓÃÉÏ·½ "Êղص½ÎÒµÄä¯ÀÀÆ÷" ¹¦ÄÜ ºÍ "¼ÓÈëÊéÇ©" ¹¦ÄÜ£¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡WearsHats¡¡As¡¡Boolean¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡RunsSlowly¡¡As¡¡Boolean¡¡

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



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡this¡¡definition£»¡¡each¡¡attribute¡¡of¡¡PersonWithAttributes¡¡is¡¡its¡¡own¡¡data¡¡member¡£¡¡Another¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡way¡¡to¡¡achieve¡¡the¡¡same¡¡effect¡¡is¡¡to¡¡consider¡¡each¡¡attribute¡¡as¡¡its¡¡own¡¡binary¡¡flag¡¡that¡¡is¡¡encoded¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡into¡¡PersonWithAttributes¡£¡¡The¡¡class¡¡would¡¡be¡¡rewritten¡¡as¡¡follows£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡PersonWithAttributes¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Attributes¡¡As¡¡Integer¡¡

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



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡rewritten¡¡example£»¡¡the¡¡Boolean¡¡attributes¡¡are¡¡encoded¡¡into¡¡the¡¡data¡¡member¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Attributes¡¡using¡¡bitwise¡¡operators¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡To¡¡encode¡¡a¡¡flag¡¡in¡¡a¡¡number¡¡means¡¡to¡¡tweak¡¡the¡¡individual¡¡binary¡¡bits¡¡of¡¡a¡¡number¡£¡¡To¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡access¡¡the¡¡individual¡¡bits£»¡¡you¡¡need¡¡to¡¡create¡¡constant¡¡numbers¡¡that¡¡are¡¡a¡¡power¡¡of¡¡2¡£¡¡We¡¡use¡¡a¡¡¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡441¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

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



power¡¡of¡¡2¡¡convention¡¡because¡¡binary¡¡is¡¡a¡¡counting¡¡system¡¡based¡¡on¡¡the¡¡power¡¡of¡¡2¡£¡¡Thus£»¡¡the¡¡¡¡

three¡¡Boolean¡¡data¡¡members¡¡are¡¡converted¡¡to¡¡constants£º¡¡



Const¡¡isTall¡¡As¡¡Integer¡¡=¡¡1¡¡

Const¡¡wearsHats¡¡As¡¡Integer¡¡=¡¡2¡¡

Const¡¡runsSlow¡¡As¡¡Integer¡¡=¡¡4¡¡¡¡



¡¡¡¡¡¡¡¡¡¡Now¡¡you¡¡could¡¡create¡¡a¡¡person¡¡that¡¡is¡¡tall¡¡and¡¡runs¡¡slowly£»¡¡like¡¡this£º¡¡



Dim¡¡person¡¡As¡¡PersonWithAttributes¡¡=¡¡New¡¡PersonWithAttributes£¨£©¡¡

person¡£Attributes¡¡=¡¡isTall¡¡Or¡¡runsSlow¡¡



¡¡¡¡¡¡¡¡¡¡The¡¡variable¡¡person¡£Attributes¡¡is¡¡assigned¡¡the¡¡operations¡¡of¡¡isTall¡¡and¡¡runsSlow¡£¡¡So¡¡if¡¡¡¡

isTall¡¡is¡¡0001£»¡¡and¡¡runsSlow¡¡is¡¡0100£»¡¡taking¡¡the¡¡bitwise¡¡OR¡¡£¨Or£©¡¡of¡¡the¡¡two¡¡values¡¡results¡¡in¡¡0101¡£¡¡

¡¡¡¡¡¡¡¡¡¡A¡¡bitwise¡¡OR¡¡is¡¡when¡¡you¡¡pare¡¡two¡¡values£»¡¡and¡¡if¡¡either¡¡value¡¡is¡¡nonzero£»¡¡then¡¡the¡¡¡¡

answer¡¡is¡¡nonzero¡£¡¡If¡¡you¡¡were¡¡to¡¡convert¡¡the¡¡binary¡¡number¡¡into¡¡a¡¡decimal¡¡number£»¡¡you¡¡would¡¡¡¡

get¡¡the¡¡value¡¡of¡¡5¡£¡¡You¡¡could¡¡verify¡¡that¡¡the¡¡person¡¡isTall¡¡like¡¡this£º¡¡



If¡¡£¨person¡£Attributes¡¡And¡¡isTall£©¡¡¡¡0¡¡Then¡¡

¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Person¡¡is¡¡tall¡¨£©¡¡

Else¡¡¡¡

¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Person¡¡is¡¡not¡¡tall¡¨£©¡¡

End¡¡If¡¡



¡¡¡¡¡¡¡¡¡¡A¡¡bitwise¡¡shift¡¡is¡¡the¡¡shifting¡¡of¡¡the¡¡bits¡¡to¡¡the¡¡left¡¡or¡¡to¡¡the¡¡right¡¡by¡¡the¡¡number¡¡of¡¡places¡¡indi

cated¡¡by¡¡the¡¡shift¡£¡¡The¡¡following¡¡code¡¡demonstrates¡¡shifting¡¡the¡¡bits¡¡two¡¡places¡¡to¡¡the¡¡left¡¡£¨¡·¡¡2¡¡



¡¡¡¡¡¡¡¡¡¡The¡¡result¡¡is¡¡2£»¡¡which¡¡has¡¡the¡¡binary¡¡value¡¡10¡£¡¡

¡¡¡¡¡¡¡¡¡¡For¡¡the¡¡most¡¡part£»¡¡you¡¡probably¡¡will¡¡not¡¡use¡¡the¡¡binary¡¡shift¡¡operators¡£¡¡Unless¡¡you¡¡are¡¡dealing¡¡¡¡

with¡¡hardware¡­related¡¡programming¡¡£¨such¡¡as¡¡GUI¡¡interactions£©£»¡¡whatever¡¡you¡¡can¡¡do¡¡with¡¡¡¡

flags¡¡can¡¡be¡¡replicated¡¡using¡¡a¡¡bination¡¡of¡¡Boolean¡¡types¡¡and¡¡structures¡£¡¡However£»¡¡when¡¡¡¡

you¡¡do¡¡encounter¡¡bitwise¡¡operators£»¡¡you¡¡will¡¡recognize¡¡what¡¡they¡¡are¡¡doing¡£¡¡¡¡



Modulus¡¡



The¡¡modulus¡¡operator¡¡£¨Mod£©¡¡is¡¡very¡¡useful¡¡when¡¡you¡¡want¡¡to¡¡perform¡¡division¡¡operations¡¡and¡¡¡¡

need¡¡to¡¡know¡¡how¡¡much¡¡is¡¡left¡¡over¡£¡¡For¡¡example£»¡¡the¡¡following¡¡calculation¡¡yields¡¡a¡¡value¡¡of¡¡3¡£¡¡



Dim¡¡a¡¡As¡¡Integer¡¡=¡¡17¡¡/¡¡5¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡442¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

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



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Yet¡¡because¡¡it¡¡is¡¡an¡¡integer¡¡division£»¡¡you¡¡don¡¯t¡¡know¡¡if¡¡the¡¡value¡¡is¡¡evenly¡¡divided¡¡by¡¡5¡£¡¡The¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡following¡¡calculation¡¡lets¡¡you¡¡figure¡¡out¡¡the¡¡remainder¡¡for¡¡the¡¡division¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡remainder¡¡As¡¡Integer¡¡=¡¡17¡¡Mod¡¡5¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Increment¡¡and¡¡Decrement¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡increment¡¡£¨£«=£©¡¡and¡¡decrement¡¡£¨¡¡¡­=£©¡¡operators¡¡are¡¡useful¡¡in¡¡place¡¡of¡¡the¡¡addition¡¡and¡¡subtrac

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡tion¡¡operators¡£¡¡Visual¡¡Basic¡¡also¡¡has¡¡the¡¡*=¡¡and¡¡/=¡¡operators£»¡¡which¡¡you¡¡can¡¡use¡¡in¡¡place¡¡of¡¡the¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡multiplication¡¡and¡¡division¡¡operators¡£¡¡The¡¡idea¡¡behind¡¡these¡¡operators¡¡is¡¡to¡¡perform¡¡an¡¡operation¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡on¡¡the¡¡variable¡¡itself¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Let¡¯s¡¡say¡¡you¡¡execute¡¡this¡¡code£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡a¡¡As¡¡Integer¡¡=¡¡2¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡a¡¡£«=¡¡1¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Then¡¡after¡¡the¡¡increment¡¡operation£»¡¡the¡¡variable¡¡a¡¡will¡¡have¡¡a¡¡value¡¡of¡¡3¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Overloading¡¡Operators¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Suppose¡¡you¡¡want¡¡to¡¡implement¡¡a¡¡special¡¡type£»¡¡such¡¡as¡¡a¡¡plex¡¡number¡¡type£»¡¡and¡¡want¡¡to¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡support¡¡the¡¡£«¡¡sign¡£¡¡To¡¡do¡¡so£»¡¡you¡¡would¡¡need¡¡to¡¡implement¡¡the¡¡£«¡¡operator£»¡¡which£»¡¡in¡¡turn£»¡¡over

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡loads¡¡the¡¡£«¡¡operator¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡As¡¡an¡¡example£»¡¡let¡¯s¡¡walk¡¡through¡¡implementing¡¡the¡¡£«¡¡operator¡¡for¡¡the¡¡plex¡¡number¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡type¡£¡¡plex¡¡numbers¡¡are¡¡numbers¡¡that¡¡have¡¡two¡¡parts£º¡¡real¡¡and¡¡imaginary¡£¡¡For¡¡example£»¡¡a¡¡£«¡¡b¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡is¡¡a¡¡plex¡¡number£»¡¡where¡¡a¡¡is¡¡the¡¡real¡¡part¡¡and¡¡b¡¡is¡¡the¡¡imaginary¡¡part¡£¡¡To¡¡add¡¡a¡¡plex¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡number£»¡¡you¡¡add¡¡the¡¡real¡¡parts£»¡¡and¡¡then¡¡add¡¡the¡¡imaginary¡¡parts£»¡¡and¡¡that¡¡gives¡¡you¡¡the¡¡new¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡number¡£¡¡The¡¡following¡¡is¡¡the¡¡plex¡¡number¡¡type£»¡¡plexType£»¡¡declaration¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡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¡¡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¡¡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£¨£©¡¡¡¡

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

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



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡ReadOnly¡¡Property¡¡Inst£¨£©¡¡As¡¡DataType¡¡

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

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡_inst¡¡

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

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

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



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡With¡¡¡¡generics£»¡¡you¡¡can¡¡write¡¡a¡¡property¡¡that¡¡contains¡¡a¡¡reference¡¡to¡¡the¡¡base¡¡type¡£¡¡Had¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡you¡¡used¡¡the¡¡pure¡¡interface¡­based¡¡code£»¡¡the¡¡¡¡Inst¡¡property¡¡would¡¡need¡¡to¡¡be¡¡of¡¡type¡¡IExample£»¡¡and¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡¡get¡¡the¡¡same¡¡effect¡¡as¡¡the¡¡¡¡generics¡¡example£»¡¡a¡¡cast¡¡would¡¡be¡¡involved¡£¡¡A¡¡cast¡¡is¡¡not¡¡the¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end¡¡of¡¡the¡¡world£»¡¡but¡¡it¡¡is¡¡inconvenient¡¡and¡¡not¡¡type¡­safe£»¡¡since¡¡you¡¡don¡¯t¡¡know¡¡if¡¡a¡¡cast¡¡will¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡work¡¡until¡¡you¡¡execute¡¡the¡¡code¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡You¡¡can¡¡add¡¡multiple¡¡interfaces¡¡and¡¡classes¡¡as¡¡constraints£»¡¡although¡¡you¡¡are¡¡limited¡£¡¡The¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡limitations¡¡are¡¡identical¡¡to¡¡the¡¡limitations¡¡when¡¡subclassing¡¡a¡¡class¡¡or¡¡interface£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡You¡¡can¡¡subclass¡¡only¡¡a¡¡sing
·µ»ØĿ¼ ÉÏÒ»Ò³ ÏÂÒ»Ò³ »Øµ½¶¥²¿ ÔÞ£¨11£© ²È£¨11£©
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·­Ò³ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿!
ÎÂÜ°Ìáʾ£º ο´Ð¡ËµµÄͬʱ·¢±íÆÀÂÛ£¬Ëµ³ö×Ô¼ºµÄ¿´·¨ºÍÆäËüС»ï°éÃÇ·ÖÏíÒ²²»´íŶ£¡·¢±íÊéÆÀ»¹¿ÉÒÔ»ñµÃ»ý·ÖºÍ¾­Ñé½±Àø£¬ÈÏÕæдԭ´´ÊéÆÀ ±»²ÉÄÉΪ¾«ÆÀ¿ÉÒÔ»ñµÃ´óÁ¿½ð±Ò¡¢»ý·ÖºÍ¾­Ñé½±ÀøŶ£¡