ÍêÈ«½²½â C#

ǰÑÔ ¡¡¡¡µÚÒ»Õ ¡¡µÚ¶þÕ¡¡µÚÈýÕ¡¡µÚËÄÕ¡¡µÚÎåÕ¡¡µÚÁùÕ¡¡µÚÆßÕ¡¡µÚ°ËÕ¡¡¡¡

0.1 ÌáÒª
»¶Ó­ÔĶÁ¡¶Õ¹ÏÖ C#¡·(Presenting C#)¡£Õâ±¾ÊéÊÇÄãÌá¸ßÆóÒµ±à³ÌÓïÑÔµÄÒ»Ìõ½Ý¾¶¡£ÕâÖÖÆóÒµ±à³ÌÓïÑÔ´øÓÐÏÂÒ»´ú±à³ÌÓïÑÔ·þÎñÔËÐÐʱ(NGWS Runtime)£ºC#(·¢Òô"C sharp")¡£
NGWS Runtime ÊÇÒ»¸ö²»½ö¹ÜÀíÖ´ÐдúÂ롢ͬʱҲÌṩʹ±à³Ì¸ü¼ÓÈÝÒ׵Ķ¯Ì¬»·¾³¡£±àÒëÆ÷²úÉúÊܹܴúÂëÒÔÖ¸ÏòÕâÖÖÊܹÜÀíÖ´Ðл·¾³¡£Äã»ñµÃ¿çƽ̨ÓïÑÔ¼¯³É¡¢¿çƽ̨ÓïÑÔÒì³£´¦Àí¡¢ÔöÇ¿°²È«ÐÔ¡¢°æ±¾¿ØÖÆ¡¢°²ÅÅÖ§³ÖºÍ²é´í·þÎñ¡£
Ö§³ÖNGWS Runtime µÄÖ÷ÒªÓïÑÔÊÇC#¡£Ö§³ÖNGWS¿ò¼ÜµÄºÜ¶à³ÌÐòÊÇÓÃC#дµÄ£¬Òò´Ë£¬ÔÚһЩ´øÓÐNGWS RuntimeµÄ±àÒëÆ÷ÖУ¬ËüµÄ±àÒëÆ÷¿ÉÒÔ±»ÈÏΪÊǷdz£¾­µÃÆð²âÊÔÇÒÊǾ­¹ýÓÅ»¯µÄ¡£C#ÓïÑÔ½è¼øÁËC++£¬µ«ÊǾ߱¸ÏÖ´ú»¯ºÍÐÂÔöµÄÀàÐͰ²È«¡ª¡ªÊ¹C#³ÉΪÆóÒµ½â¾ö·½°¸µÄÊ×Ñ¡ÓïÑÔ¡£

0.2 Ë­Ó¦¸Ã¶ÁÕâ±¾Êé
Èç¹ûÄã¶Ô±à³ÌºÜİÉú£¬Õâ±¾Êé²»ÊʺÏÄã¡£Õâ±¾ÊéÆóͼÈóÌÐòÔ±½âÍѲ¢Ê¹ÓÃC#£¬»ùÓÚËûÃÇÒѾ­ÓµÓеÄ֪ʶ¡£¡¶Õ¹ÏÖ C#¡·µÄÄ¿±êÃé×¼ÁËÒѾ­¾ßÓÐÈçC/C++¡¢VB¡¢Java»òÆäËü±à³Ì¾­ÑéµÄ³ÌÐòÔ±¡£
Èç¹ûÄã¾ßÓÐC++µÄ±³¾°£¬×ªÏòC#»áºÜÈÝÒ×£¬µ«ÊÇ£¬Èç¹ûÄ㾫ͨÓÚÆäËü²»Í¬µÄÓïÑÔ£¬Õâ±¾ÊéÒ²»áºÄµôÄãµÄһЩÈÕ×Ó¡£Èç¹ûÄãÓÐÒ»µãCOM±à³ÌµÄ֪ʶ£¬Õâ±¾»á¸üÓÐȤ£¬µ«»áCOM±à³Ì²»ÔÙÊDZØÒªµÄ¡£

0.3 Õâ±¾ÊéÈçºÎ×éÖ¯
µÚÒ»Õ C#¼ò½é¡ª¡ªÕâÒ»Õ°ÑÄã´øµ½C#¹äÒ»»Ø£¬Í¬Ê±»Ø´ðÁËÓйØÄãÓ¦¸Ã¿¼ÂÇѧϰC#µÄÎÊÌâ¡£
µÚ¶þÕ NGWS Runtime µÄ¼¼Êõ»ù´¡¡ª¡ª½éÉÜNGWS RuntimeΪÔËÐеÄC#´úÂëËùÌṩµÄµÍ²ã¼Ü¹¹¡£
µÚÈýÕ µÚÒ»¸öC#Ó¦ÓóÌÐò¡ª¡ª´´½¨ÕæÕýµÚÒ»¸öC#Ó¦ÓóÌÐò(·ñÔòËüÊÇÊ²Ã´ÄØ?)£¬Ëü¾ÍÊÇÒ»¸ö"Hello World"Ó¦ÓóÌÐò¡£
µÚËÄÕ C#ÀàÐÍ¡ª¡ª¿ÉÒÔ¿´µ½ÓÃÔÚC#Ó¦ÓóÌÐòÖеĸ÷ÖÖÀàÐÍ¡£Ì½Ë÷ÖµÐͺÍÒýÓÃÐ͵ÄÇø±ð£¬»¹ÓÐÈçºÎ¼Ó¿òºÍÏû¿ò¡£
µÚÎåÕ Àࡪ¡ªC#¹¦ÄÜÕæÕýÇ¿´óµÄ±êÖ¾£¬ËüÊǾßÓÐÀàµÄÃæÏò¶ÔÏóµÄ±à³Ì¡£Äã»áѧµ½ºÃ¶àºÃ¶àµÄ¶«Î÷£¬Èç¹¹Ô캯Êý¡¢Îö¹¹º¯Êý¡¢·½·¨¡¢ÊôÐÔ¡¢Ë÷ÒýºÍʼþµÈ¡£
µÚÁùÕ ¿ØÖÆÓï¾ä¡ª¡ª¶ÔÓ¦ÓóÌÐòʵÐÐÁ÷³Ì¿ØÖÆ¡£Ì½Ë÷C#ÌṩµÄ¸÷ÖÖÑ¡ÔñºÍ³ÂÊöÓï¾ä¡£
µÚÆßÕ Òì³£´¦Àí¡ª¡ª»ñµÃÁ˱àдʵÏÖÒì³£´¦ÀíµÄÓ¦ÓóÌÐò¼¼ÇÉ£¬ÓµÓÐÕâÖÖ¼¼ÇÉ£¬ÔÚNGWS RuntimeÊÀ½ç£¬ÄãÊÇÒ»¸öºÃµÄ¹«Ãñ
µÚ°ËÕ ÓÃC#д×é¼þ¡ª¡ªÓÃC#¹¹½¨×é¼þ£¬ÒòΪ֧³ÖNGWS Runtime£¬Ëü¿ÉÒÔ±»²»Í¬ÓïÑÔÆ½Ì¨µÄ¿Í»§Ê¹Óá£
µÚ¾ÅÕ ÅäÖúͰ²ÅÅ¡ª¡ªÑ§µ½ÈçºÎÓÃC#ÓÐÌõ¼þµØ½øÐбàÒ빤×÷£¬ºÍÈçºÎΪÄãµÄC#Ô´Âë×Ô¶¯µØ´´½¨Îĵµ¡£ÁíÍ⣬ÕâÒ»Õ½«½éÉܵ½NGWSµÄ°æ±¾¼¼ÊõÎÊÌâ¡£
µÚʮՠÓ÷ÇÊܹܴúÂë½»»¥²Ù×÷¡ª¡ª·¢ÏÖÄãÈçºÎʹÓÃC#ÄÚ²¿µÄ·ÇÊܹܴúÂ룬ÇÒ·ÇÊܹܴúÂëÈçºÎÓëÄãµÄC#×é¼þÒ»Æð½»»¥²Ù×÷¡£
µÚʮһÕ C#´úÂë²é´í¡ª¡ª»ñµÃʹÓÃSDK²é´í¹¤¾ßµÄ¼¼ÇÉ£¬¿ÉÒÔÔÚÓ¦ÓóÌÐòÖÐ׼ȷµØÕÒµ½´íÎó²¢ÐÞ¸ÄËüÃÇ¡£
µÚÊ®¶þÕ °²È«¡ª¡ªÌ½Ë÷NGWS RuntimeµÄ°²È«¸ÅÄѧµ½´úÂë·ÃÎʰ²È«ÐԺͻùÓÚ½ÇÉ«µÄ°²È«ÐÔ¡£

0.4 ʹÓÃÕâ±¾ÊéÄãÐèҪʲô?
´ÓÕâ±¾ÊéµÄ¹Ûµã¿´£¬ÄãËùÐèÒªµÄ¾ÍÊÇÏÂÒ»´úwindows·þÎñÈí¼þ¿ª·¢°ü(NGWS SDK)¡£¾¡¹ÜÖÁÉÙÖ»ÒªÓÐNGWS Runtime ºÍC#±àÒëÆ÷¾Í¿ÉÒÔ£¬µ«µ±Ì½Ë÷ÕâЩ¼¤¶¯ÈËÐĵÄм¼Êõ¹¦ÄÜ Ê±£¬ÔÚһ̨»úÆ÷ÉÏ×°ÓÐ˵Ã÷ÎļþµµºÍËùÓеÄSDK¹¤¾ß(°üÀ¨debugger)£¬½«ÊÇÒ»¸ö¼«ºÃµÄÖ÷Òâ¡£
Õâ±¾Êé²»ÐèÒªÄã×°ÔÚ»úÆ÷ÉϵÄVisual Studio 7µÄÈκι¤¾ß¡£ÎÒ½ö½¨ÒéÄãÒªÓÐÒ»¸öÓÅÐãµÄÖ§³ÖÐÐÊýµÄ³ÌÐò±à¼­Æ÷£¬ÓÃÒԱ༭C#Ô´Îļþ¡£
¡­¡­
(Ê¡ÂÔµôһЩÓйسö°æ¹ý³ÌºÍ±íʾ¸ÐлµÄ¶ÎÂä)

0.5 ¹ØÓÚ×÷Õß
Christoph Wille£¬Î¢Èíϵͳ¹¤³Ìʦ(MCSE)¡¢Î¢Èíϵͳ¿ª·¢Ê¦(MCSD)¡¢NetwareÍøÂç¹ÜÀíÔ±(CNA)ºÍMCP-IT£¬×÷Ϊһ¸öÍøÂç×ÉѯÈËÔ±ºÍ³ÌÐòÔ±£¬Ìرð¾«Í¨Windows DNA¡£Î¢ÈíÈÏΪËûÊÇASP·½Ãæ×îÓмÛÖµµÄÈË(MVP)£¬ËûÊǺÍ΢ÈíÔÚÒ»ÆðʹÓÃÔçÆÚµÄC#°æ±¾µÄÉÙÊý¿ª·¢ÕßÖ®Ò»¡£
Christoph ¶À×Ô»ò²ÎÓëÁ˼¸±¾ÊéµÄд×÷£¬°üÀ¨Sams³ö°æÉçµÄ¡¶×ÔѧADO2.5 21Ìì¡·¡¢¡¶×ÔѧASP 24Сʱ¡·¡¢¡¶×ÔѧMCSE TCP/IP 14Ìì¡·ºÍ¡¶MCSE ѵÁ·Ö¸ÄÏ£ºSQL Server 7¹ÜÀí¡·¡£

 

µÚÒ»Õ C#¼ò½é

»¶Ó­Äã¼ÓÈëC#£¨ÄîC sharp£©µÄÊÀ½ç£¡ ÕâÒ»Õ½«ÈÃÄãÁ˽âC#£¬²¢»Ø´ðһЩÏà¹ØµÄÎÊÌ⣬È磺ÄãΪʲôҪʹÓÃC#£¬C++ºÍC#Ö÷ÒªÓÐʲô²»Í¬µÄµØ·½£¬ÒÔ¼°ÎªÊ²Ã´C#ʹÈí¼þ¿ª·¢¸üÈÝÒ×¶øÇÒ»¹¸üÓÐȤ¡£

1.1 ΪʲôÊÇÁíÍâÒ»ÖÖ±à³ÌÓïÑÔ?

Äã±ØÐë»Ø´ðµÄÒ»¸öÎÊÌ⣺µ±ÒѾ­Ê¹ÓÃC++»òVB´ÓÊÂÆóÒµ¿ª·¢Ê±£¬ÎªÊ²Ã´»¹ÒªÑ§Ï°ÁíÒ»ÖÖÓïÑÔ? ÒÔÉÌÒµµÄ¹Ûµã»Ø´ðÕâ¸öÎÊÌ⣺¡°ÔÚÆóÒµ¼ÆËãÁìÓò£¬C#½«»á±ä³ÉΪÓÃÓÚ±àд¡®ÐÂÒ»´úwindows·þÎñ¡¯(Next Generation Windows Services,¼òдΪNGWS )Ó¦ÓóÌÐòµÄÖ÷ÒªÓïÑÔ¡£¡± ÕâÒ»Õ½«¶ÔÓòÎÊýÇëÇóÌṩ֧³Ö£¬²¢³ÂÁÐÁËC#µÄһЩ¹¦ÄÜ£¬Ëü»áʹÄãµÄθ¿Ú´ó¿ª¡£

C#ÓïÑÔ×ÔC/C++ÑÝ±ä¶øÀ´¡£µ«ÊÇ£¬ËüÏÖ´ú¡¢¼òµ¥¡¢ÍêÈ«ÃæÏò¶ÔÏóºÍÀàÐͰ²È«¡£Èç¹ûÄãÊÇC/C++³ÌÐòÔ±£¬Ñ§Ï°ÇúÏß½«»áºÜƽ̹¡£Ðí¶àC#Óï¾äÖ±½Ó½èÓÃÄãËùϲ°®µÄÓïÑÔ£¬°üÀ¨±í´ïʽºÍ²Ù×÷·û¡£Õ§Ò»¿´£¬»¹ÒÔΪËü¾ÍÊÇC++¡£

¹ØÓÚC#×îÖØÒªµÄÒ»µã£ºËüÊÇÏÖ´úµÄ±à³ÌÓïÑÔ¡£Ëü¼ò»¯ºÍ¸ïÐÂÁËC++ÖеÄÀà¡¢Ãû×ֿռ䡢·½·¨ÖØÔغÍÒì³£´¦ÀíµÈÁìÓò¡£ÞðÆúÁËC++µÄ¸´ÔÓÐÔ£¬Ê¹Ëü¸üÒ×ÓᢸüÉÙ³ö´í¡£

C#¼õÉÙÁËC++µÄһЩ¹¦ÄÜ£¬¸üÒ×ÓÚʹÓᣲ»ÔÙÓкꡢģ°åºÍ¶àÖØ¼Ì³Ð¡£Ìرð¶ÔÆóÒµ¿ª·¢ÕßÀ´Ëµ£¬ÉÏÊö¹¦ÄÜÖ»»á²úÉú¸ü¶àµÄÂé·³¶ø²»ÊÇÐ§Òæ¡£

ʹ±à³Ì¸ü·½±ãµÄй¦ÄÜÊÇÑϸñµÄÀàÐͰ²È«¡¢°æ±¾¿ØÖÆ¡¢À¬»øÊÕ¼¯(garbage collect)µÈµÈ¡£ËùÓÐÕâЩ¹¦ÄܵÄÄ¿±ê£¬¶¼ÊÇÔÚÓÚ¿ª·¢ÃæÏò×é¼þµÄÈí¼þ¡£

ÔÚ¼ÌÐø³ÊÏÖ³ö¸ü¶àµÄ¹¦ÄÜ֮ǰ£¬ÎÒÏëÔÚÒÔϲûÊöC#ÖÁ¹ØÖØÒªµÄ¸÷ÖÖÒªËØ¡£

¡¤ ¼òµ¥

¡¤ÏÖ´ú

¡¤ÃæÏò¶ÔÏó

¡¤ÀàÐͰ²È«

¡¤°æ±¾¿ØÖÆ

¡¤¼æÈÝ

¡¤Áé»î

1.1.1 ¼òµ¥

C#¾ßÓÐC++ËùûÓеÄÒ»¸öÓÅÊÆ¾ÍÊǼòµ¥Ò×ѧ¡£¸ÃÓïÑÔÊ×ÒªµÄÄ¿±ê¾ÍÊǼòµ¥¡£ºÜ¶à¹¦ÄÜ(»¹²»Èç˵ÊÇȱÉÙÁËC++µÄһЩ¹¦ÄÜ)ÓÐÖúÓÚC#È«·½Î»µØ¼ò»¯¡£

ÔÚC#ÖУ¬Ã»ÓÐC++ÖÐÁ÷ÐеÄÖ¸Õ롣ĬÈϵأ¬Ä㹤×÷ÔÚÊܹÜÀíµÄ´úÂëÖУ¬ÔÚÄÇÀï²»ÔÊÐíÖîÈçÖ±½Ó´æÈ¡ÄÚ´æµÈ²»°²È«µÄ²Ù×÷¡£ÎÒÏëûÓÐÄĸöC++³ÌÐòÔ±¿ÉÒÔÉù³Æ£¬ËûÃÇ´ÓÀ´¾ÍûÓÐʹÓÃÖ¸Õë·ÃÎʹý²»ÊôÓÚËûÃǵÄÄÚ´æ¡£

ÓëÖ¸ÕëµÄ¡°±¯¾çÐÔ¡±ÃÜÇÐÏà¹ØµÄ£¬¾ÍÊÇ¡°ÓÞ´À¡±µÄ²Ù×÷¡£ÔÚC++ÖУ¬ÓС°::¡±¡¢¡°.¡±¡¢ºÍ¡°->¡±²Ù×÷·û£¬ËüÃÇ·Ö±ðÓÃÓÚÃû×ֿռ䡢³ÉÔ±ºÍÒýÓ᣶ÔÓÚÐÂÊÖÀ´Ëµ£¬²Ù×÷·ûÖÁ½ñÈÔÊÇѧϰµÄÒ»µÀÄѹء£C#ÆúÓÃÆäËü²Ù×÷·û£¬½öʹÓõ¥¸ö²Ù×÷·û ¡°. ¡±¡£ÏÖÔÚ³ÌÐòÔ±ËùÐèÒªµÄ¾ÍÊǶÔǶÌ×Ãû×ÖµÄÀí½âÁË¡£

Äã²»±Ø¼Çס»ùÓÚ²»Í¬´¦ÀíÆ÷¼Ü¹¹µÄÒþº¬µÄÀàÐÍ£¬ÉõÖÁ¸÷ÖÖÕûÐ͵ı仯·¶Î§¡£C#ʹÓÃͳһµÄÀàÐÍϵͳ£¬ÞðÆúÁËC++¶à±äµÄÀàÐÍϵͳ¡£ÕâÖÖϵͳÔÊÐíÄã°Ñ¸÷ÖÖÀàÐÍ×÷Ϊһ¸ö¶ÔÏó²é¿´£¬ÒÔÈ·¶¨ËüÊÇÒ»¸öԭʼÀàÐÍ»¹ÊÇÒ»¸öÕæÕýµÄÀà¡£ºÍÆäËü±à³ÌÓïÑÔÏà±È£¬ÓÉÓÚ¼Ó¿ò(boxing)ºÍÏû¿ò(unboxing)µÄ»úÖÆ£¬°Ñ¼òµ¥ÀàÐ͵±×÷¶ÔÏó´¦Àí²¢²»ÄÜ»ñµÃÐÔÄܵĸÄÉÆ¡£ÉÔºó½«Ïêϸ½âÊͼӿòºÍÏû¿ò£¬µ«»ù±¾ÉÏ£¬½öµ±ÐèҪʱ²ÅÄÜʹÓüòµ¥ÀàÐÍ×÷Ϊ¶ÔÏóÀ´·ÃÎÊÕâÖÖ¼¼Êõ¡£

Ê×ÏÈ£¬ÀÏÁ·µÄ³ÌÐòÔ±¿ÉÄܲ»Ï²»¶Ëü£¬µ«ÊÇÕûÐͺͲ¼¶ûÐÍÈç½ñÖÕ¾¿ÊÇÁ½ÖÖÍêÈ«²»Í¬µÄÊý¾ÝÀàÐÍ¡£Õâ¾ÍÒâζ×ÅÔ­À´ifÓï¾äÖдíÎóµÄ¸³ÖµÏÖÔڻᱻ±àÒë³ö´í£¬ÒòΪifÓï¾äÖ»½ÓÊܲ¼¶ûÀàÐ͵ÄÖµ¡£ÔÙÒ²²»»á³öÏÖÎóÓø³Öµ·ûΪ±È½Ï·ûÕâÑùµÄ´íÎó£¡ C#ͬʱҲ½â¾öÁË´æÔÚÓÚC++ÖÐÒѾ­ÓÐЩÄêÍ·µÄÈßÓà¡£ÕâÖÖÈßÓà°üÀ¨¶Ô³£ÊýºÍ¶àÖÖ²»Í¬×Ö·ûÀàÐ͵Ä#defineÔ¤¶¨Òå¡£¼øÓÚÈßÓà¸ñʽÒѾ­´Ó¸ÃÓïÑÔÖÐÏûʧ£¬¹ÊÒ»°ãÔÚC#Öж¼¿ÉÒÔʹÓÃÕâЩ¸ñʽÁË¡£

1.1.2 ÏÖ´ú

ÄãͶÈëѧϰC#µÄŬÁ¦ÊÇÒ»±Ê´óͶ×Ê£¬ÒòΪC#ÊÇ×÷Ϊ±àдNGWS Ó¦ÓóÌÐòµÄÖ÷ÒªÓïÑÔ¶øÉè¼Æ¡£Ä㽫»á·¢Ïֺܶà×Ô¼ºÓÃC++¿ÉÒÔʵÏÖ»òÕߺܷÑÁ¦ÊµÏֵŦÄÜ£¬ÔÚC#Öв»¹ýÊÇÒ»²¿·Ö»ù±¾µÄ¹¦ÄܶøÒÑ¡£

¶ÔÓÚÆóÒµ¼¶µÄ±à³ÌÓïÑÔÀ´Ëµ£¬ÐÂÔöµÄ½ðÈÚÊý¾ÝÀàÐͺÜÊÜ»¶Ó­¡£ÄãÓõ½ÁËÒ»ÖÖеÄÊ®½øÖÆÊý¾ÝÀàÐÍ£¬ËüרÓÃÓÚ½ðÈÚ¼ÆËã·½Ãæ¡£Èç¹û²»Ï²»¶ÕâÖÖÏֳɼòµ¥µÄÀàÐÍ£¬¸ù¾ÝÓ¦ÓóÌÐòµÄÌØÊâÐèÇ󣬿ÉÒÔºÜÈÝÒ׵ش´½¨³öеÄÒ»ÖÖÊý¾ÝÀàÐÍ¡£ ÎÒÒѾ­Ìáµ½£¬Ö¸Õë²»ÔÙÊÇÄã±à³ÌÎäÆ÷µÄÒ»²¿·Ö¡£²»ÒªÌ«¾ªÑÈ£¬È«ÃæµÄÄÚ´æ¹ÜÀíÒѾ­²»ÊÇÄãµÄÈÎÎñ¡£ÔËÐÐʱNGWSÌṩÁËÒ»¸öÀ¬»øÊÕ¼¯Æ÷£¬¸ºÔðC#³ÌÐòÖеÄÄÚ´æ¹ÜÀí¡£ÒòÄÚ´æºÍÓ¦ÓóÌÐò¶¼Êܵ½¹ÜÀí£¬ËùÒÔºÜÓбØÒª¼ÓÇ¿ÀàÐͰ²È«£¬ÒÔÈ·±£Ó¦ÓóÌÐòµÄÎȶ¨ÐÔ¡£

¶ÔÓÚC++³ÌÐòÔ±£¬Òì³£´¦Àíȷʵ²»ÊÇÐµĶ«Î÷£¬¿ÉËü»¹ÊÇC#µÄÖ÷Òª¹¦ÄÜ¡£C#µÄÒì³£´¦ÀíÓëC++µÄ²»Í¬µãÔÚÓÚËüÊÇ¿çÓïÑÔÆ½Ì¨µÄ(ÔËÐÐʱµÄÁíÒ»¸ö¹¦ÄÜ)¡£ÔÚûÓÐC#֮ǰ£¬Äã±ØÐë´¦Àí¹ÖÒìµÄHRESULTs£¬µ«ÏÖÔÚÓÉÓÚʹÓÃÁË»ùÓÚÒì³£µÄ½¡×³µÄ³ö´í´¦Àí£¬ ÕâÒ»Çж¼ÖÕ½áÁË¡£

¶ÔÓÚÏÖ´úµÄÓ¦ÓóÌÐò£¬°²È«ÊÇÊ×ÒªµÄ£¬C#Ò²²»»áÀýÍâ¡£ËüÌṩÁËÔªÊý¾ÝÓï·¨£¬ÓÃÓÚÉùÃ÷ÏÂÊöNGWS°²È«Ä£Ê½µÄÐÔÄܺÍÐí¿É¡£ÔªÊý¾ÝÊÇNGWS runtimeµÄÒ»¸ö¹Ø¼üµÄ¸ÅÄÏÂÒ»Õ½«Éæ¼°µ½Ëü¸üÉîµÄº¬Òå¡£

1.1.3 ÃæÏò¶ÔÏó

Äã²»»áÔ¤ÁÏÒ»ÖÖÐÂÓïÑÔ²»Ö§³ÖÃæÏò¶ÔÏóµÄ¹¦ÄܰÉ? C#µ±È»Ö§³ÖËùÓйؼüµÄÃæÏò¶ÔÏóµÄ¸ÅÄÈç·â×°¡¢¼Ì³ÐºÍ¶à̬ÐÔ¡£ÍêÕûµÄC#Ààģʽ¹¹½¨ÔÚNGWS runtimeµÄÐéÄâ¶ÔÏóϵͳ(VOS£¬Virtual Object System)µÄÉϲ㣬VOS½«ÔÚÏÂÕÂÃèÊö¡£¶ÔÏóģʽֻÊÇ»ù´¡£¬¶ø²»ÔÙÊDZà³ÌÓïÑÔµÄÒ»²¿·Ö¡£


ÄãÒ»¿ªÊ¼±ØÐë¹Ø×¢µÄ£¬¾ÍÊDz»ÔÙÓÐÈ«¾Öº¯Êý¡¢±äÁ¿»òÕßÊdz£Á¿¡£ËùÓеĶ«Î÷¶¼±»·â×°ÔÚÀàÖУ¬°üÀ¨ÊµÀý³ÉÔ±(ͨ¹ýÀàµÄʵÀý¡ª¡ª¶ÔÏ󣬿ÉÒÔ·ÃÎʳÉÔ±)»ò¾²Ì¬³ÉÔ±(ͨ¹ýÊý¾ÝÀàÐÍ·ÃÎÊ)¡£ÕâÑù¾ÍʹC#´úÂë¸ü¼ÓÒ×¶Á£¬ÇÒÓÐÖúÓÚ¼õÉÙDZÔÚµÄÃüÃû³åÍ»¡£

¶¨ÒåÀàÖеķ½·¨Ä¬ÈÏÊÇ·ÇÐéÄâµÄ(ËüÃDz»Äܱ»ÅÉÉúÀà¸Äд)¡£Ö÷ÒªÂÛµãÊÇ£¬ÕâÑù»áÏû³ýÓÉÓÚż¶û¸Äд·½·¨¶øµ¼ÖÂÁíÍâһЩԭÂë³ö´í¡£Òª¸Äд·½·¨£¬±ØÐë¾ßÓÐÃ÷È·µÄÐéÄâ±êÖ¾¡£ ÕâÖÖÐÐΪ²»µ«Ëõ¼õÁËÐéÄ⺯Êý±íµÄ´óС£¬¶øÇÒ»¹È·±£ÕýÈ·°æ±¾µÄ¿ØÖÆ¡£

ʹÓÃC++±àдÀ࣬Äã¿ÉÒÔʹÓôæÈ¡ÐÞÊηûΪÀà³ÉÔ±ÉèÖò»Í¬µÄ·ÃÎʵȼ¶¡£C#ͬÑùÖ§³Öprivate¡¢protected ºÍpublic ÈýÖÖ´æÈ¡È¨ÏÞ £¬¶øÇÒ»¹Ôö¼ÓÁ˵ÚËÄÖÖ£ºinternal¡£ÓйشæÈ¡ÐÞÊηûµÄÏêϸÇé¿ö½«ÔÚµÚÎåÕ ¡°Àࡱ ÖÐ˵Ã÷¡£

Äã´´½¨Á˶àÉÙ¸öÀàÊÇ´Ó¶àÖØ»ùÀàÅÉÉú³öÀ´µÄ(ATL ³ÌÐòÔ±£¬ÄãµÄͶƱ²»¼ÆÔÚÄÚ£¡) ? ÔÚ´ó¶àÊýÇé¿öÏ£¬Ö»Òª´ÓÒ»¸öÀàÅÉÉú±ã¿É¡£¶àÖØ»ùÀàÈdzöµÄÂ鷳ͨ³£±ÈËüÃǽâ¾öµÄÎÊÌ⻹¶à¡£Õâ¾ÍÊÇΪʲôC#Ö»ÔÊÐíÒ»¸ö»ùÀà¡£Èç¹ûÄã¾õµÃÐèÒª¶àÖØ¼Ì³Ð£¬¿ÉÒÔÔËÓýӿڡ£

Ò»¸ö¿ÉÄܳöÏÖµÄÎÊÌ⣺ÔÚC#Öв»´æÔÚÖ¸Õ룬ÈçºÎÄ£·ÂËü? Õâ¸öÎÊÌâµÄ´ð°¸ºÜÓдú±íÐÔ£¬ËüÌṩÁ˶ÔNGWS runtimeʼþģʽµÄÖ§³Ö¡£ÔٴΣ¬ÎÒ½«°Ñ¶ÔËüµÄÈ«Ãæ½âÊͷŵ½µÚÎåÕ¡£

1.1.4 ÀàÐͰ²È«

ÎÒÔÙ´ÎѡָÕë×÷Ϊһ¸öÀý×Ó¡£ÔÚC++ÖÐÓµÓÐÒ»¸öÖ¸Õ룬ÄãÄÜ×ÔÓɵذÑËüÇ¿ÖÆ×ª»»³ÉΪÈκÎÀàÐÍ£¬°üÀ¨×ö³öÖîÈç°ÑÒ»¸öint*(ÕûÐÍÖ¸Õë)Ç¿ÖÆ×ª»»³ÉÒ»¸ödouble *(Ë«¾«¶ÈÖ¸Õë)ÕâÑùµÄɵÊ¡£Ö»ÒªÄÚ´æÖ§³ÖÕâÖÖ²Ù×÷£¬Ëü¾ÍÄܹ¤×÷¡£Õâ²¢²»ÊÇÄãËùÏëÏóµÄÆóÒµ¼¶±à³ÌÓïÑÔµÄÀàÐͰ²È«¡£

Ô­ÔòÐÔµÄÎÊÌ⣬C#ʵʩ×îÑϸñµÄÀàÐͰ²È«£¬ÒÔ±£»¤×Ô¼º¼°À¬»øÊÕ¼¯Æ÷(garbage collector)¡£Òò´Ë±ØÐë×ñÊØC#ÖÐһЩÓйرäÁ¿µÄ¹æÔò£º

Äã²»ÄÜʹÓÃûÓгõʼ»¯µÄ±äÁ¿¡£¶ÔÓÚ¶ÔÏóµÄ³ÉÔ±±äÁ¿£¬±àÒëÆ÷¸ºÔðÇåÁã¡£¶ø¾Ö²¿±äÁ¿£¬ÔòÓÉÄ㸺ÔðÇåÁã¡£µ±ÄãʹÓÃÒ»¸öûÓгõʼ»¯µÄ±äÁ¿Ê±£¬±àÒëÆ÷»á½ÌÄãÔõô×ö¡£ÓŵãÊÇÄܹ»±ÜÃâÓÉÓÚʹÓò»¾­³õʼ»¯µÄ±äÁ¿¼ÆËã½á¹û¶øµ¼ÖµĴíÎ󣬶øÄ㻹²»ÖªµÀÕâÐ©Ææ¹ÖµÄ½á¹ûÊÇÈçºÎ²úÉúµÄ¡£ C#È¡ÏûÁ˲»°²È«µÄÀàÐÍת»»¡£²»ÄܰÑÒ»¸öÕûÐÍÇ¿ÖÆ×ª»»³ÉÒ»¸öÒýÓÃÀàÐÍ(Èç¶ÔÏó)£¬¶øµ±ÏòÏÂת»»Ê±£¬C#ÑéÖ¤ÕâÖÖת»»ÊÇÕýÈ·µÄ¡£(Ò²¾ÍÊÇ˵£¬ÅÉÉúÀàÕæµÄÊÇ´ÓÏòÏÂת»»µÄÄǸöÀàÅÉÉú³öÀ´µÄ¡£)

±ß½ç¼ì²éÊÇC#µÄÒ»²¿·Ö¡£ÔÙÒ²²»»á³öÏÖÕâÖÖÇé¿ö£ºµ±Êý×éʵ¼ÊÖ»¶¨ÒåÁËn-1¸öÔªËØ£¬È´³¬¶îµØÊ¹ÓÃÁËn¸öÔªËØ¡£

ËãÊõÔËËãÓпÉÄÜÒç³ö½á¹ûÊý¾ÝÀàÐ͵ķ¶Î§¡£C#ÔÊÐíÔÚÓï¾ä¼¶»òÓ¦ÓóÌÐò¼¶¼ì²âÕâЩÔËËã¡£ÔÚÔÊÐí¼ì²éÒç³öµÄÇé¿öÏ£¬µ±Òç³ö·¢Éúʱ½«»áÒý·¢Ò»¸öÒì³£¡£ ÔÚC#ÖУ¬±»´«µÝµÄÒýÓòÎÊýÊÇÀàÐͰ²È«µÄ¡£

1.1.5 °æ±¾¿É¿Ø(Versionable)

ÔÚ¹ýÈ¥µÄ¼¸ÄêÖУ¬¼¸ºõËùÓеijÌÐòÔ±¶¼ÖÁÉÙÓÐÒ»´Î²»µÃ²»Éæ¼°µ½ÖÚËùÖÜÖªµÄ¡°DLLµØÓü¡±¡£¸ÃÎÊÌâÆðÒòÓÚ¶à¸öÓ¦ÓóÌÐò¶¼°²×°ÁËÏàͬDLLÃû×ֵIJ»Í¬°æ±¾¡£ÓÐʱ£¬Àϰ汾µÄÓ¦ÓóÌÐò¿ÉÒԺܺõغÍа汾µÄDLLÒ»Æð¹¤×÷£¬µ«ÊǸü¶àµÄʱºòËüÃÇ»áÖжÏÔËÐС£ÏÖÔڵİ汾ÎÊÌâÕæÊÇÁîÈËÍ·Í´¡£

ÕýÈçÄ㽫ÔÚµÚ°ËÕ¡°ÓÃC#д×é¼þ¡±Ëù¿´µ½µÄ£¬NGWS runtime ½«¶ÔÓ¦ÓóÌÐòÌṩ°æ±¾Ö§³Ö¡£C#¿ÉÒÔ×îºÃµØÖ§³Ö°æ±¾¿ØÖÆ¡£¾¡¹ÜC#²»ÄÜÈ·±£ÕýÈ·µÄ°æ±¾¿ØÖÆ£¬µ«ÊÇËü¿ÉÒÔΪ³ÌÐòÔ±±£Ö¤°æ±¾¿ØÖƳÉΪ¿ÉÄÜ¡£ÓÐÁËÕâÖÖÖ§³Ö£¬Ò»¸ö¿ª·¢ÈËÔ±¾Í¿ÉÒÔÈ·±£µ±ËûµÄÀà¿âÉý¼¶Ê±£¬ÈÔ±£Áô×ŶÔÒÑ´æÔڵĿͻ§Ó¦ÓóÌÐòµÄ¶þ½øÖƼæÈÝ¡£

1.1.6 ¼æÈÝ

C#²¢Ã»ÓдæÔÚÓÚÒ»¸ö·â±ÕµÄÊÀ½çÖС£ËüÔÊÐíʹÓÃ×îÏȽøµÄNGWSµÄͨÓÃÓïÑԹ淶(Common Language Specification£¬¼òдΪCLS)·ÃÎʲ»Í¬µÄAPI¡£CLS¹æ¶¨ÁËÒ»¸ö±ê×¼£¬Ê¹·ûºÏÕâÖÖ±ê×¼µÄÓïÑÔÄܹ»Ð­Í¬¹¤×÷¡£ÎªÁ˼ÓÇ¿CLSµÄ±àÒ룬C#±àÒëÆ÷¼ì²âËùÓеĹ«¹²³ö¿Ú±àÒ룬²¢ÔÚͨ²»¹ýʱÁгö´íÎó¡£

µ±È»£¬ÄãÒ²ÏëÄܹ»·ÃÎʾÉÒ»µãµÄCOM¶ÔÏó¡£NGWS runtimeÌṩ¶ÔCOM͸Ã÷µÄ·ÃÎÊ¡£ÈçºÎ¼¯³ÉÔ­À´µÄ´úÂ뽫ÔÚµÚ10Õ¡°·ÇÊܹܴúÂëµÄЭͬ¹¤×÷¡±ÓнéÉÜ¡£

OLE ×Ô¶¯»¯ÊÇÒ»ÖÖÌØÊâµÄ¶¯Îï¡£ÈκÎÒ»¸öʹÓÃC++´´½¨OLE×Ô¶¯»¯ÏîÄ¿µÄÈËÒѾ­Ï²»¶Éϸ÷ÖÖ¸÷ÑùµÄ×Ô¶¯»¯Êý¾ÝÀàÐÍ¡£ÓиöºÃÏûÏ¢¾ÍÊÇC#Ö§³ÖËüÃÇ£¬¶øÇÒûÓÐÉæ¼°·³ËøµÄϸ½Ú¡£

×îºó£¬C#ÔÊÐíÄãÓÃC Ô­Ð͵ÄAPI½øÐÐЭ×÷¡£¿ÉÒÔ´ÓÄãµÄÓ¦ÓóÌÐò·ÃÎÊÈκÎDLLÖеÄÈë¿Úµã(ÓÐCµÄÔ­ÐÍ)¡£ÓÃÓÚ·ÃÎÊԭʼAPIµÄ¹¦ÄܳÆ×÷ƽ̨µ÷Ó÷þÎñ(Plaform Invocation Services £¬ËõдPInvoke)£¬µÚ10Õ½«ËµÃ÷ʹÓÃC API½øÐÐЭͬ¹¤×÷µÄһЩÀý×Ó¡£

1.1.7 Áé»î

ÉÏÒ»²¿·ÖµÄ×îºóÒ»¶ÎÓпÉÄÜÌáÐÑÁ˳ÌÐòÔ±¡£Äã¿ÉÄÜ»áÎÊ£º¡°ÄѵÀ¾ÍûÓÐÎÒÒª´«µÝÖ¸ÕëµÄAPIÂð?¡± ºÜÕýÈ·£¬²»ÊÇÖ»ÓÐÉÙÊýµÄÕâÖÖAPI£¬¶øÊÇÓкܶà(ÓÐµã±£ÊØµÄ¹À¼Æ)¡£ÕâÖÖ¶ÔԭʼWIN32´úÂëµÄ·ÃÎÊÓÐʱµ¼Ö¶Էǰ²È«ÀàÌØ¶¨Ö¸ÕëµÄʹÓÃ(¾¡¹ÜËüÃÇÖеÄһЩÓÉÓÚÊÜCOMºÍPInvokeµÄÖ§³Ö¿ÉÒÔ½â¾ö)¡£

¾¡¹ÜC#´úÂëµÄȱʡ״̬ÊÇÀàÐͰ²È«µÄ£¬µ«ÊÇÄã¿ÉÒÔÉùÃ÷һЩÀà»òÕß½öÉùÃ÷ÀàµÄ·½·¨ÊǷǰ²È«ÀàÐ͵ġ£ÕâÑùµÄÉùÃ÷ÔÊÐíÄãʹÓÃÖ¸Õë¡¢½á¹¹£¬¾²Ì¬µØ·ÖÅäÊý×é¡£°²È«ÂëºÍ·Ç°²È«Âë¶¼ÔËÐÐÔÚͬһ¸ö¹ÜÀí¿Õ¼ä£¬Õâ¾Í°µÊ¾×ŵ±´Ó°²È«Âëµ÷Ó÷ǰ²È«Âëʱ²»»áÏÝÈëÁм¯(marshaling)¡£

1.2 С½á

C#ÓïÑÔ´ÓCºÍC++ÑÝ±ä¶øÀ´£¬ËüÊǸøÄÇЩԸÒâÎþÉüC++Ò»µãµ×²ã¹¦ÄÜ£¬ÒÔ»ñµÃ¸ü·½±ãºÍ¸ü²úÆ·»¯µÄÆóÒµ¿ª·¢ÈËÔ±¶ø´´ÔìµÄ¡£C#ÏÖ´ú¡¢¼òµ¥¡¢ÃæÏò¶ÔÏóºÍÀàÐͰ²È«¡£¾¡¹ÜËü½è¼øÁËCºÍC++µÄÐí¶à¶«Î÷£¬µ«ÊÇÔÚһЩÖîÈçÃû×ֿռ䡢Àà¡¢·½·¨ºÍÒì³£´¦ÀíµÈÌØ¶¨ÁìÓò£¬ËüÃÇÖ®¼ä»¹´æÔÚמ޴óµÄ²îÒì¡£

C#ΪÄãÌṩÁË·½±ãµÄ¹¦ÄÜ£¬ÈçÀ¬»øÊÕ¼¯¡¢ÀàÐͰ²È«¡¢°æ±¾¿ØÖÆ£¬µÈµÈ¡£½öÓеÄ"´ú¼Û"¾ÍÊÇ£¬´úÂë²Ù×÷ĬÈÏÊÇÀàÐͰ²È«µÄ£¬²»ÔÊÐíÖ¸Õë¡£²»¹ý£¬´ó¶àÊýÎÊÌâ¹âƾÀàÐͰ²È«¾Í¿ÉÒÔ½â¾öÁË¡£µ«ÊÇ£¬Èç¹ûÄãÐèÒªÖ¸Õ룬ÈÔ¿ÉÒÔͨ¹ý·Ç°²È«ÂëʹÓÃËüÃÇ£¬¶øÇÒµ±µ÷Ó÷ǰ²È«Âëʱ£¬²»Äܺ¬ÓÐÁм¯(mashall)¡£

µÚ¶þÕ NGWS runtime ¼¼Êõ»ù´¡¡¡¡¡¡¡¡¡»Ø¶¥²¿

¼ÈÈ»ÄãÒѾ­¾ßÓÐÁËC#È«ÃæµÄÓ¡Ïó£¬ÎÒÒ²ÏëÈÃÄãÁìÂÔNGWS runtimeµÄȫò¡£C#ÒÀ¿¿ÓÉNGWSÌṩµÄÔËÐÐʱ£»Òò´Ë£¬ÓбØÒªÖªµÀÔËÐÐʱÈçºÎ¹¤×÷£¬ÒÔ¼°Ëü±³ºóËùÔ̺¬µÄ¸ÅÄî¡£

ËùÒÔ£¬ÕâÒ»Õ·ÖΪÁ½²¿·Ö¡ª¡ªËüÃÇÊÇËùÓеĸÅÄîºÍÓ¦ÓõĻù´¡¡£Á½²¿·ÖµÄÄÚÈÝËäÈ»ÓÐÐ©ÖØµþ£¬µ«ÓÐÖúÓÚ¼ÓÉîÀí½âÕýÔÚѧϰµÄÄÚÈÝ¡£

2.1 NGWS Runtime

NGWSºÍNGWS RuntimeΪÄãÌṩÁËÒ»ÖÖÔËÐÐʱ»·¾³¡£¸ÃÔËÐÐʱ¹ÜÀíÖ´ÐдúÂ룬²¢ÌṩÁËʹ±à³Ì¸üÈÝÒ׵ķþÎñ¡£Ö»ÒªÄãµÄ±àÒëÆ÷Ö§³ÖÕâÖÖÔËÐÐʱ£¬Äã¾Í»á´ÓÕâÖÖÊܹÜÀíµÄÖ´Ðл·¾³ÖеÃÒæ¡£

Äã²Â²âC#±àÒëÆ÷Ö§³ÖNGWS runtimeºÜÕýÈ·£¬µ«ÊDz»½öËüÖ§³ÖNGWS runtime£¬VBºÍC++Ò²Ö§³Ö¡£ÕâЩΪ֧³ÖÔËÐÐʱËù´´½¨µÄ´úÂë³Æ×÷¡°ÊܹܴúÂ롱(managed code)¡£ÒÔÏÂÊÇÄãµÄÓ¦ÓóÌÐò´ÓNGWS runtimeÄÇÀïËùµÃµ½µÄÀûÒæ£º

¡¤¿çÓïÑÔÆ½Ì¨¼¯³É(ͨ¹ýͨÓÃÓïÑԹ淶)

¡¤×Ô¶¯ÄÚ´æ¹ÜÀí(À¬»øÊÕ¼¯)

¡¤¿çÓïÑÔÆ½Ì¨Òì³£´¦Àí(ͳһչ¿ª)

¡¤ÔöÇ¿°²È«(°üÀ¨ÀàÐͰ²È«)

¡¤°æ±¾Ö§³Ö("DLLµØÓü"ÖÕ½áÕß)

¡¤×é¼þ½»»¥¼ò»¯Ä£Ê½

ÒòNGWS runtimeÌṩÁËËùÓеÄÕâÐ©Òæ´¦£¬±àÒëÆ÷±ØÐë°ÑÔªÎļþºÍÊܹܴúÂëÒ»Æð·¢³ö¡£ÔªÎļþÃèÊö´úÂëÖеÄÀàÐÍ£¬ËüºÍÄãµÄ´úÂë´æÔÚÒ»Æð(ÓëPEÀàËÆ---PEΪ¿É±äλִÐÐÎļþ)

ÕýÈçÄã´ÓºÜ¶àÖÖ¿çÓïÑÔÆ½Ì¨¹¦ÄÜËù¿´µ½µÄ£¬NGWS runtimeÖ÷ÒªÊÇÒ»Öָ߶ȼ¯³ÉµÄ¡¢¿çÔ½¶àÖÖ²»Í¬ÓïÑÔµÄÆ½Ì¨¡£ÕâÖÖÖ§³ÖÉõÖÁÔÊÐíÄã´ÓÒ»¸öVB¶ÔÏóÅÉÉú³öÒ»¸öC#Àà(ÎÒºóÃæ»á¸ø³öÒªÌÖÂÛµÄÎÄÕÂ)¡£

C#³ÌÐòÔ±½«»áϲ»¶µÄÒ»¸ö¹¦ÄÜÊÇ£¬ËûÃDz»±Øµ£ÐÄÄÚ´æ¹ÜÀí¡ª¡ªÒ²¾ÍÊÇ˵²»±Øµ£ÐijôÃûÕÑÖøµÄÄÚ´æÐ¹Â©¡£NGWS runtimeÌṩÁËÄÚ´æ¹ÜÀí£¬µ±¶ÔÏóºÍ±äÁ¿µÄÉúÃüÆÚ½áÊø(²»ÔÙ±»ÒýÓÃ)ʱ£¬À¬»øÊÕ¼¯Æ÷ÊÍ·ÅËüÃÇ¡£ÎÒÕæµÄϲ»¶Õâ¸ö¹¦ÄÜ£¬ÒòΪÔÚCOMÖеÄÄÚ´æ¹ÜÀíÒ»Ö±ÊÇÎÒµÄÒ»¿éÐIJ¡¡£

Ó¦¸Ã¹ÄÀøÅäÖÃÒ»¸ö¹ÜÀíÓ¦ÓóÌÐò»òÕß×é¼þ¡£ÒòΪ¹ÜÀíÓ¦ÓóÌÐòº¬ÓÐÔªÊý¾ÝÎļþ£¬NGWS runtime¿ÉÒÔÀûÓÃÕâЩÐÅÏ¢£¬ÒÔÈ·±£ÄãµÄÓ¦ÓóÌÐò¾ßÓÐËüËùÐèµÄ¸÷Öֹ涨°æ±¾¡£Ëù²úÉúµÄÃ÷ÏÔЧ¹ûΪ£¬ÓÉÓÚÄãµÄ´úÂëûÓÐÏ໥֮¼äµÄÒÀÀµ£¬¿ÉÄܺÜÉÙ³öÏÖÖжϡ£

ÕâÕÂÓàϵIJ¿·Ý·ÖΪÁ½Ð¡½Ú£¬Ã¿Ò»Ð¡½ÚÌÖÂÛNGWS runtimeµÄ¸÷¸ö·½Ã棬ֱµ½ÄãµÄC#Ó¦ÓóÌÐòÄÜÖ´ÐÐΪֹ¡£

¡¤ÖмäÓïÑÔ(Intermediate Language£¬ËõдIL)ºÍÔªÊý¾Ý

¡¤¼´Ê±±àÒëÆ÷(just-in-time compliers,¼ò³ÆJITers)

2.1.1 ÖмäÓïÑÔºÍÔªÊý¾Ý

ÓÉC#±àÒëÆ÷Éú³ÉµÄÊܹܴúÂë²¢²»ÊÇԭʼ´úÂ룬µ«ËüÊÇÖмäÓïÑÔ(IL)´úÂë¡£ÕâÖÖIL´úÂë×ÔÉí±ä³ÉÁËNGWS runtimeµÄÊܹÜÖ´Ðнø³ÌµÄÈë¿Ú¡£IL´úÂëÃ÷ÏÔµÄÓÅÊÆÔÚÓÚËüÊÇCPUÎ޹صģ¬ÕâÒ²Òâζ×Å£¬ÄãÒªÓÃÄ¿±ê»úÆ÷ÉϵÄÒ»¸ö±àÒëÆ÷²ÅÄܰÑIL´úÂëת»»³Éԭʼ´úÂë¡£

¾¡¹ÜIL´úÂëÓɱàÒëÆ÷²úÉú£¬µ«Ëü²¢²»ÊDZàÒëÆ÷Ìṩ¸øÔËÐÐʱ½öÓеĶ«Î÷¡£±àÒëÆ÷ͬÑù²úÉú´úÂëµÄÔªÊý¾Ý£¬Ëü¸æËßÔËÐÐʱÓйشúÂëµÄ¸ü¶àµÄ¶«Î÷£¬ÀýÈç¸÷ÖÖÀàÐ͵͍Òå¡¢¸÷ÖÖÀàÐͳÉÔ±µÄÃû×ÖÒÔ¼°ÆäËüÊý¾Ý¡£»ù±¾ÉÏ£¬ÔªÊý¾ÝÊÇÀàÐͿ⡢ע²á±íÄÚÈÝºÍÆäËüÓÃÓÚCOMµÄÐÅÏ¢¡£¾¡¹ÜÈç´Ë£¬ÔªÊý¾Ý»¹ÊÇÖ±½ÓºÍÖ´ÐдúÂëºÏ²¢ÔÚÒ»Æð£¬²¢Ã»Óзֿª¡£

ILºÍÔªÊý¾Ý´æ·ÅÓÚÀ©Õ¹ÁËPE¸ñʽµÄÎļþÖÐ(PE¸ñʽÓÃÓÚ.exeºÍ.dllÎļþ)¡£µ±ÕâÑùµÄÒ»¸öPEÎļþ±»×°ÔØÊ±£¬ÔËÐÐʱ´ÓÎļþÖж¨Î»ºÍ·ÖÀë³öÔªÊý¾ÝºÍIL¡£

ÏÖÔÚ£¬ÎÒ¸ø³öÁËÒÑÓеÄILÖ¸ÁîµÄ¼ò¶ÌĿ¼¡£¾¡¹ÜËü²»ÊÇÒ»¸öÍêÕûµÄÇåµ¥£¬Ò²²»ÐèÒªÄãÊì¼ÇºÍÀí½â£¬µ«ÊÇËüΪÄãÌṩÁËC#±à³ÌËù±ØÐë¾ßÓеĻù´¡ÖªÊ¶¡£

¡¤ËãÊõºÍÂß¼­²Ù×÷·û

¡¤¿ØÖÆÁ÷³Ì

¡¤Ö±½ÓÄÚ´æ·ÃÎÊ

¡¤¶ÑÕ»²Ù×÷

¡¤²ÎÊýºÍ¾Ö²¿±äÁ¿

¡¤¶ÑÕ»·ÖÅä

¡¤¶ÔÏóģʽ

¡¤ÊµÀýÀàÐÍÖµ

¡¤ÁÙ½çÇø

¡¤Êý×é

¡¤ÀàÐÍλÖÃ

¡¤¼´Ê±±àÒëÆ÷(JITters)

2.1.2 ¼´Ê±±àÒëÆ÷(JITters)

ÓÉC#»òÆäËüÄܲúÉúÊܹܴúÂëµÄ±àÒëÆ÷ËùÉú³ÉµÄÊܹܴúÂë¾ÍÊÇILÂë¡£ËäÈ»IL´úÂë±»°ü×°ÔÚÒ»¸öÓÐЧµÄPEÎļþÖУ¬µ«ÊÇÄ㻹ÊDz»ÄÜÖ´ÐÐËü£¬³ý·ÇËü±»×ª»»³ÉΪÊܹÜԭʼ´úÂë¡£Õâ¾ÍÊÇNGWS runtime ¼´Ê±±àÒëÆ÷(Ò²³Æ×÷JITters)´óÏÔÉíÊÖµÄʱºò¡£

ΪʲôÄã»á¶Ô¼´Ê±±àÒë´úÂë¸Ðµ½Ñá·±£¬ Ϊʲô²»°ÑÕû¸öIL PEÎļþ±àÒë³Éԭʼ´úÂë? ´ð°¸ÊÇʱ¼ä¡ª¡ªÐèÒª°ÑIL´úÂë±àÒë³ÉCPU¹æ¸ñµÄ´úÂëµÄʱ¼ä¡£ÕâÖÖ±àÒ뽫¸ü¼ÓÓÐЧÂÊ£¬ÒòΪһЩ³ÌÐò¶Î´ÓÀ´¾ÍûÓб»Ö´Ðйý¡£ÀýÈ磬ÔÚÎÒµÄ×Ö´¦ÀíÆ÷ÖУ¬ÓʼþºÏ²¢¹¦ÄÜ´ÓÀ´¾ÍûÓб»±àÒë¡£

´Ó¼¼ÊõÉÏ˵£¬È«²¿µÄ´¦Àí¹ý³ÌÈçÏ£ºµ±Ò»¸öÀàÐͱ»×°ÔØÊ±£¬×°ÔØÆ÷´´½¨Ò»¸ö´æ¸ù(stub)£¬²¢Ê¹ËüÁ¬½Óÿһ¸öÀàÐ͵ķ½·¨¡£µ±Ò»¸ö·½·¨µÚÒ»´Î±»µ÷ÓÃʱ£¬´æ¸ù°Ñ¿ØÖƽ»¸øJIT¡£JIT°ÑIL±àÒëΪԭʼ´úÂ룬ÇÒ°Ñ´æ¸ùÖ¸ÕëÖ¸Ïò×°È뻺³åÇøµÄԭʼ´úÂë¡£½Ó×ŵĵ÷Óý«ÒªÖ´ÐеÄԭʼÂë¡£ÔÚijЩλÖÃÉÏ£¬ËùÓеÄIL¶¼±»×ª»»³ÉΪԭʼ´úÂ룬ÕâʱJITter´¦ÓÚ¿ÕÏÐ״̬¡£

ÕýÈçÎÒÔÚÇ°ÃæÌáµ½µÄ£¬JIT±àÒëÆ÷Óкܶ࣬²»Ö¹Ò»¸ö¡£ÔÚWindowsƽ̨ÉÏ£¬NGWS runtime´øÓÐ3¸ö²»Í¬µÄJIT±àÒëÆ÷¡£

JIT¡ª¡ªÕâÊÇNGWS runtimeĬÈÏʹÓõÄJIT±àÒëÆ÷¡£ËüÊÇÒ»¸öºǫ́ÓÅ»¯µÄ±àÒëÆ÷ £¬ÔÚǰ̨ʵÐÐÊý¾ÝÁ÷·ÖÎö£¬²¢´´½¨Á˸߶ÈÓÅ»¯µÄÊܹÜԭʼ´úÂë×÷ΪÊä³ö½á¹û¡£JIT¿ÉÒÔʹÓò»ÑϸñµÄILÖ¸Á±àÂ룬µ«ÊÇËùÐè×ÊÔ´½«Ê®·Ö¿É¹Û¡£Ö÷ÒªµÄÏÞÖÆÔÚÓÚÄÚ´æ×ã¼£(footprint)¡¢½á¹û¹¤×÷¼¯£¬ÒÔ¼°ÊµÐÐÓÅ»¯ËùÏûºÄµÄʱ¼ä¡£

EconoJIT¡ª¡ª ºÍÖ÷JITÏà±È£¬EconJITµÄÄ¿±êÊǰÑIL¸ßËÙµØ×ª»»³ÉÊܹÜԭʼ´úÂë¡£ËüÔÊÐí°Ñ²úÉúµÄԭʼ´úÂë×°È뻺³åÇø£¬µ«ÊÇÊä³öÂë²¢²»ÏóÖ÷JITÉú³ÉµÄ´úÂëÄÇÑùÓÅ»¯(´úÂëС)¡£µ±ÄÚ´æ½ôÕÅʱ£¬¿ìËÙ´úÂëÉú³É·½°¸µÄÓÅÊÆ½«µ´È»ÎÞ´æ¡£ÓÀ¾ÃµØ¶ªÆúÎÞÓõġ¢ÒÑJIT¹ýµÄ´úÂ룬¾Í¿ÉÒ԰Ѹü´óµÄIL³ÌÐò×°Èë´úÂ뻺³åÇø¡£ÒòΪJIT±àÒë¿ì£¬Ö´ÐÐËÙ¶ÈÒ²ÈÔÈ»ºÜ¿ì¡£

PreJIT¡ª¡ª¾¡¹ÜËüÒÀ¾ÝÖ÷JIT£¬µ«²Ù×÷ÆðÀ´¸üÏóÊÇÒ»¸ö´«Í³µÄ±àÒëÆ÷¡£Äã°²×°ÁËNGWS×é¼þ£¬Ëü²ÅÄÜÔËÐУ¬²Å¿ÉÒÔ°ÑIL´úÂë±àÒë³ÉÊܹÜԭʼ´úÂë¡£µ±È»×îÖյĽá¹ûΪ£¬¸ü¿ìµÄ×°ÔØÊ±¼äºÍ¸ü¿ìµÄÓ¦ÓóÌÐòÆô¶¯Ê±¼ä(²»ÐèÒª¸ü¶àµÄJIT±àÒë)¡£

ÔÚËùÁгöµÄJITtersÖУ¬ÓÐÁ½¸öÊÇÔËÐÐʱµÄJITters¡£¿ÉÊÇÄãÔõô¾ö¶¨ÒªÊ¹ÓÃÄÄÒ»¸öJIT£¬ËüÈçºÎʹÓÃÄÚ´æ? ÓÐÒ»¸ö³ÆÎª¡°JIT±àÒë¹ÜÀíÆ÷¡±µÄСӦÓóÌÐò(jitman.exe)£¬Ëü´æ·ÅÔÚNGWS SDK°²×°Ä¿Â¼ÏµÄbinĿ¼ÖС£µ±Ö´ÐиóÌÐòʱ£¬Ëü°ÑÒ»¸öͼ±ê¼Óµ½ÏµÍ³ÈÎÎñÌõÉÏ£¬Ë«»÷¸Ãͼ±ê´ò¿ª³ÌÐò¶Ô»°¿ò(¼ûͼ2.1)¡£

 

¾¡¹ÜËüÊÇÒ»¸öССµÄ¶Ô»°¿ò£¬¿ÉÊÇÄãËùÑ¡ÔñµÄÑ¡ÏÄÜÊÇÏ൱ǿ´óµÄ¡£Ã¿Ò»¸öÑ¡ÏÔÚÒÔÏÂÃèÊö¡£ Use EconoJIT only Ñ¡Ï¡ªµ±¸Ã¸´Ñ¡¿òûÓÐÑ¡ÉÏʱ£¬NGWS runtimeʹÓÃĬÈϵÄÕý³£µÄJIT±àÒëÆ÷¡£Ç°Ãæ¾ÍÔø¾­½âÊ͹ýÁ½ÖÖJITterµÄÇø±ð¡£

Max Code Pitch Overhead(%)Ñ¡Ï¡ª¸ÃÉèÖýö±£Áô¸øEconoJIT¡£Ëü¿ØÖÆÁËJIT±àÒëʱ¼äºÍÖ´ÐдúÂëʱ¼äµÄ°Ù·Ö±È¡£Èç¹û³¬¹ýÁËÉ趨µÄÖµ£¬´úÂ뻺³åÇøµÃµ½À©³ä£¬ÒÔËõ¶ÌJIT±àÒëËùÏûºÄµÄʱ¼ä¡£

Limit Size of Code CacheÑ¡Ï¡ª¸ÃÏîĬÈÏΪûÓÐÑ¡ÖС£Ã»ÓÐÑ¡Ôñ¸ÃÏîÒâζ×Å»º³åÇø½«ÀûÓÃËüËùÄܵõ½µÄÄÚ´æ¡£Èç¹ûÄãÏëÏÞÖÆ»º³åÇø´óС£¬Ñ¡ÖиÃÑ¡ÏÕ⽫ÔÊÐíÄãʹÓÃMax Size of Cache(bytes)Ñ¡Ïî¡£

Max Size of Cache(bytes)Ñ¡Ï¿ØÖÆÈÝÄÉJIT´úÂëµÄ»º³åÇøµÄ×î´óÖµ¡£ËäÈ»Äã¿ÉÒԷdz£ÑϸñµØÏÞÖÆÕâ¸öÖµ£¬µ«Ä㻹ÊÇÓ¦¸ÃСÐÄ£¬²»Äܳ¬¹ýÕâ¸ö»º³åÇøËùÊʺϵÄ×î´óÖµ¡£·ñÔò¸Ã·½·¨µÄJIT±àÒ뽫»áʧ°Ü¡£

Optimize For SizeÑ¡Ï¡ª¸æËßJIT ±àÒëÆ÷£¬ÓÅ»¯µÄÄ¿µÄÊÇΪÁËʹ´úÂë¸üС¶ø²»ÊÇÄÜÖ´Ðеøü¿ì¡£Õâ¸öÉèÖÃĬÈÏÊǹصôµÄ¡£

Enable Concurrent GC[garbage collection]Ñ¡Ï¡ªÀ¬»øÊÕ¼¯(GC)ĬÈϵØÔËÐÐÔÚÓû§´úÂëµÄÏß³ÌÖС£ÒâζGC·¢Éúʱ£¬¿ÉÄÜ»á×¢Òâµ½»ØÓ¦ÓÐÇá΢µÄÑÓ³Ù¡£Îª·ÀÖ¹³öÏÖ¸ÃÏÖÏ󣬴ò¿ªµ±Ç°GC¡£×¢Ò⣬µ±Ç°GC±È±ê×¼GC¸üÂý£¬Ëü½öÔÚwindows 2000ÉÏдʱ(the time of writing)ÓÐЧ¡£

µ±ÓÃC#´´½¨ÏîĿʱ£¬Äã¿ÉÄÜʹÓò»Í¬µÄÉèÖÃÊÔÑé¹ý¡£µ±´´½¨ UI-intensiveÓ¦ÓóÌÐòʱ£¬Ä㽫»á¿´µ½ÔÊÐíµ±Ç°GCµÄ×î´ó²î±ð¡£

2.2 ÐéÄâ¶ÔÏóϵͳ(VOS)

µ½Ä¿Ç°ÎªÖ¹£¬Äã½ö¿´µ½ÁËNGWS runtimeÈçºÎ¹¤×÷£¬µ«ÊDz¢²»Á˽âËü¹¤×÷µÄ¼¼Êõ±³¾°ÒÔ¼°ÎªÊ²Ã´ËüÒªÕâÑù¹¤×÷¡£Õâ½Ú¶¼ÊǹØÓÚ NGWS ÐéÄâ¶ÔÏóϵͳµÄ(VOS)¡£

ÒÔÏÂΪÔÚVOSÖÐÐγÉÉùÃ÷¡¢Ê¹Óú͹ÜÀíÀàÐÍÄ£ÐÍʱ£¬NGWS runtimeµÄ¹æÔò¡£ÔÚVOS±³ºóµÄ˼ÏëÊǽ¨Á¢Ò»¸ö¿ò¼Ü£¬ÔÚÖ´ÐдúÂëʱ²»ÄÜÎþÉüÐÔÄÜ£¬ÔÊÐí¿çƽ̨ÓïÑÔ¼¯³ÉºÍÀàÐͰ²È«¡£ ÎÒÌáµ½µÄ¿ò¼ÜÊÇÔËÐÐʱ¼Ü¹¹µÄ»ù´¡¡£ÎªÁ˰ïÖúÄã¸üºÃµØÁ˽âËü£¬ÎÒ½«Ëü¹´»®³öËĸöÇøÓò¡£µ±¿ª·¢C#Ó¦ÓóÌÐòºÍ×é¼þʱ£¬Àí½âËüÃǺÜÖØÒª¡£

VOSÀàÐÍϵͳ¡ª¡ªÌṩ·á¸»µÄÀàÐÍϵͳ£¬Ëü´òËãÖ§³ÖÈ«Ãæ±à³ÌÓïÑÔµÄÍêȫʵʩ¡£

ÔªÊý¾Ý¡ª¡ªÃèÊöºÍÒýÓÃVOSÀàÐÍϵͳËù¶¨ÒåµÄÀàÐÍ¡£ÔªÊý¾ÝµÄÓÀ¾Ã¸ñʽÓë±à³ÌÓïÑÔÎ޹أ¬µ«ÊÇ£¬ÔªÊý¾Ý°Ñ×Ô¼ºµ±×÷Ò»ÖÖ»¥»»»úÖÆÀ´Ê¹Óã¬ÕâÖÖ»¥»»´¦ÓÚ¹¤¾ßºÍNGWSµÄÐéÄâÖ´ÐÐϵͳ֮¼ä¡£

ͨÓÃÓïÑԹ淶(CLS)¡ª¡ªCLS¶¨ÒåÁËVOSÖÐÀàÐ͵Ä×Ó¼¯£¬Ò²¶¨ÒåÁ˳£¹æµÄÓ÷¨¡£Èç¹ûÒ»¸öÀà¿â×ñÊØCLSµÄ¹æÔò£¬ËüÈ·±£Àà¿â¿ÉÒÔÔÚÆäËüËùÓÐÄÜʵÏÖCLSµÄ±à³ÌÓïÑÔÉÏʹÓá£

ÐéÄâÖ´ÐÐϵͳ(VES)¡ª¡ªÕâÊÇVOSʵʱµÄʵÏÖ¡£VES¸ºÔð×°ÈëºÍÖ´ÐÐΪNGWSÔ˵Ãʱ±àдµÄ³ÌÐò¡£

ÕâËĸö²¿·ÖÒ»Æð×é³ÉÁËNGWS runtime¼Ü¹¹¡£Ã¿Ò»²¿·ÖÔÚÏÂÃæÐ¡½ÚÖÐÃèÊö¡£

2.2.1 VOSÀàÐÍϵͳ

VOSÀàÐÍϵͳÌṩ·á¸»µÄÀàÐÍϵͳ£¬Ëü´òËãÖ§³Ö¶àÖÖ±à³ÌÓïÑÔµÄÍêȫʵʩ¡£ËùÒÔ£¬VOS±ØÐë¶¼Ö§³ÖÃæÏò¶ÔÏóµÄÓïÑԺ͹ý³Ì±à³ÌÓïÑÔ¡£

ÏÖÔÚ£¬´æÔÚןܶàÖÖ½üËÆµ«Óе㲻¼æÈݵÄÀàÐÍ¡£¾ÍÄÃÕûÐ͵±Àý×Ó£¬ÔÚVBÖУ¬ËüÊÇ16볤£¬¶øÔÚC++ÖУ¬ËüÊÇ32λ¡£»¹Óиü¶àµÄÀý×Ó£¬ÌرðÊÇÓÃÔÚÈÕÆÚºÍʱ¼äÒÔ¼°Êý¾Ý¿â·½ÃæµÄÊý¾ÝÀàÐÍ¡£ÕâÖÖ²»¼æÈÝʹӦÓóÌÐòµÄ´´½¨ºÍά»¤²»±ØÒªµØ¸´ÔÓ»¯£¬ÓÈÆäµ±³ÌÐòʹÓÃÁ˶àÖÖ±à³ÌÓïÑÔʱ¡£

ÁíÒ»¸öÎÊÌâÊÇ£¬ÒòΪ±à³ÌÓïÑÔÖ®¼ä´æÔÚ×ÅһЩ²î±ð£¬Äã²»ÄÜÔÚÒ»ÖÖÓïÑÔÖÐÖØÓÃÁíÒ»ÖÖÓïÑÔ´´½¨µÄÀàÐÍ¡£(COMÓöþ½øÖƱê×¼½Ó¿Ú²¿·ÖµØ½â¾öÁËÕâ¸öÎÊÌâ)¡£ µ±½ñ´úÂëÖØÓÿ϶¨ÊÇÓÐÏ޵ġ£

·¢²¼Ó¦ÓóÌÐòµÄ×î´óÕϰ­ÊǸ÷ÖÖ±à³ÌÓïÑԵĶÔÏóÄ£ÐͲ»Í³Ò»¡£¼¸ºõÿһ·½Ãæ¶¼´æÔÚ×ŲîÒ죺ʼþ¡¢ÊôÐÔ¡¢ÓÀ¾Ã±£´æµÈµÈ¡£

VOSÕâÀォ¸Ä±äÕâÖÖÏÖÏó ¡£VOS¶¨ÒåÁËÃèÊöÖµµÄÀàÐÍ£¬²¢¹æ¶¨ÁËÀàÐ͵ÄËùÓÐÖµËù±ØÐëÖ§³ÖµÄÒ»ÌõºÏÔ¼¡£Ç°ÃæÌáµ½µÄÖ§³ÖÃæÏò¶ÔÏóºÍ¹ý³Ì±à³ÌÓïÑÔ£¬¾Í´æÔÚ×ÅÁ½ÖÖÖµºÍ¶ÔÏó¡£

¶ÔÓÚÖµ£¬ÀàÐÍ´æ´¢ÓÚ±íÊöÖУ¬Í¬Ñù²Ù×÷Ò²ÔÚÆäÖÐʵÐС£¶ÔÏó¸üÇ¿´óÒòΪËüÏÔʽµØ´æÓÚ±íÊöÖС£Ã¿Ò»¸ö¶ÔÏó¶¼ÓÐÒ»¸öÇø±ðÓÚÆäËü¶ÔÏóµÄʶ±ðºÅ¡£Ö§³Ö²»Í¬µÄVOSÀàÐÍÔÚµÚËÄÕ ¡°C#ÀàÐÍ¡±ÖÐÌá³ö¡£

2.2.2ÔªÊý¾Ý

¾¡¹ÜÔªÊý¾ÝÓÃÓÚÃèÊöºÍÒýÓÃÓÉVOSÀàÐÍϵͳ¶¨ÒåµÄÀàÐÍ£¬µ«Ëü»¹²»ÄÜËø¶¨µ½Õâ¸öµ¥¸öÄ¿±ê¡£µ±Äãдһ¸ö³ÌÐòʱ£¬Í¨¹ýÀûÓÃÀàÐÍÉùÃ÷£¬ÄãËùÉùÃ÷µÄÀàÐÍ(¼Ù¶¨ËüÃÇÊÇÊýÖµÀàÐÍ»òÒýÓÃÀàÐÍ)±»½éÉܸøNGWS runtimeÀàÐÍϵͳ¡£ÀàÐÍÉùÃ÷ÔÚ´æÓÚPE¿ÉÖ´ÐÐÎļþÄÚ²¿µÄÔªÊý¾ÝÖеõ½ÃèÊö¡£

»ù±¾ÉÏ£¬ÔªÊý¾ÝÓÃÓÚ¸÷ÏîÈÎÎñ£ºÓÃÀ´±íʾNGWS runtimeÓÃ;µÄÐÅÏ¢£¬È綨λºÍ×°ÔØÀà¡¢ ÄÚ´æÖÐÕâЩÀàµÄÊÂÀý¡¢½â¾öµ÷Óà ¡¢·­ÒëILΪԭʼÂë¡¢¼ÓÇ¿°²È«²¢ÉèÖÃÔËÐÐʱÉÏÏÂÎı߽硣

Äã²»±Ø¹ØÐÄÔªÊý¾ÝµÄÉú³É¡£ÔªÊý¾ÝÊÇÓÉC#µÄ¡°´úÂëתIL±àÒëÆ÷¡±(code-to-IL compiler,²»ÊÇJIT±àÒëÆ÷)Éú³ÉµÄ¡£´úÂëתIL±àÒëÆ÷·¢ËͶþ½øÖÆÔªÊý¾ÝÐÅÏ¢¸øPEÎļþ£¬ÊÇÒÔ±ê×¼µÄ·½Ê½·¢Ë͵쬲»ÏóC++±àÒëÆ÷ÄÇÑù£¬Îª³ö¿Úº¯Êý´´½¨ËüÃÇ×Ô¼ºµÄÐÞÊÎÃû×Ö¡£

Äã´ÓÔªÊý¾ÝºÍ¿ÉÖ´ÐдúÂë²¢´æËù»ñµÃµÄÖ÷ÒªÓÅÊÆÎª£¬ÓйØÀàÐ͵ÄÐÅϢͬÀàÐÍ×ÔÉí¹Ì¶¨ÔÚÒ»Æð£¬²»»á±é²¼ºÜ¶àµØ·½¡£Í¬ÑùÓÐÖúÓÚ½â¾ö´æÔÚÓÚCOMÖеİ汾ÎÊÌâ¡£½øÒ»²½µØ£¬Äã¿ÉÒÔÔÚÏàͬµÄÉÏÏÂÎÄÖÐʹÓò»Í¬µÄ°æ±¾¿â£¬ÒòΪ¿â²»½ö±»×¢²á±íÒýÓã¬Ò²±»°üº¬ÔÚ¿ÉÖ´ÐдúÂëÖеÄÔªÊý¾ÝÒýÓá£

2.2.3ͨÓÃÓïÑԹ淶

ͨÓÃÓïÑԹ淶(CLS)²¢²»ÊÇÐéÄâ¶ÔÏóϵͳ(VOS)ÕæÕýµÄÒ»²¿·Ö£¬ËüÊÇÌØÊâµÄ¡£CLS¶¨ÒåÁËVOSÖеÄÒ»¸öÀàÐÍ×Ó¼¯£¬Ò²¶¨ÒåÁ˱ØÐë·ûºÏCLSµÄ³£¹æÓ÷¨¡£

ÄÇô£¬¶Ô´ËÓÐʲôÃÔ»óÄØ?Èç¹ûÒ»¸öÀà¿â×ñÊØCLS¹æÔò£¬ÆäËü±à³ÌÓïÑÔͬÑùÒ²×ñÊØCLS¹æÔò£¬ÄÇôÆäËü±à³ÌÓïÑԵĿͻ§Ò²¿ÉÒÔʹÓÃÀà¿â¡£CLSÊǹØÓÚÓïÑԵĽ»»¥¿É²Ù×÷ÐÔ(interoperability)¡£Òò´Ë£¬³£¹æÓ÷¨±ØÐë½ö×ñÑ­Íⲿ¿É·ÃÎÊÏîÄ¿ (externally visible items)Èç·½·¨¡¢ÊôÐÔºÍʼþµÈµÈ¡£ ÎÒËùÃèÊöµÄÓŵãÊÇÄã¿ÉÒÔ×öÒÔϹ¤×÷¡£ÓÃC#дһ¸ö×é¼þ£¬ÔÚVBÖÐÅÉÉúËü£¬Òò¼ÓÔÚVBÖеŦÄÜÊÇÈç´Ë֮ǿ´ó£¬ÔÚC#ÖÐÔٴδÓVBÀàÅÉÉúËü¡£Ö»ÒªËùÓеÄÍⲿ¿É·ÃÎÊÏî×ñÊØCLS¹æÔò£¬ÕâÑùÊÇ¿ÉÐеġ£

ÎÒÔÚÕâ±¾ÊéÖгöʾµÄ´úÂë²»¹ØÐÄCLSЭ¶¨¡£µ«ÔÚ¹¹½¨ÄãµÄÀà¿âʱҪעÒâµ½CLSЭ¶¨¡£ÎÒÌṩÁ˱í2.1£¬ÓÃÒÔ¸øÀàÐͺÍÍⲿ¿É·ÃÎÊÏÒåЭ¶¨¹æÔò¡£

Õâ¸öÇåµ¥²»ÍêÕû¡£Ëü½ö°üº¬Ò»Ð©ºÜÖØÒªµÄÏîÄ¿¡£ÎÒ²»Ö¸³ö³öÏÖÔÚ±¾ÊéÖÐÿһÖÖÀàÐ͵ÄCLSЭ¶¨£¬ËùÒÔÓиöºÃÖ÷Ò⣺µ±ÄãѰÕÒCLSЭ¶¨Ê±£¬ÖÁÉÙÓ¦¸Ãä¯ÀÀ¸Ã±í£¬ÒÔÁ˽âÄÄÖÖ¹¦ÄÜÓÐЧ¡£²»Òªµ£ÐÄÄã²»ÊìϤÕâÕűíÖеÄÿһ¸öº¬Ò壬ÔÚÕâ±¾ÊéÖÐÄã»áѧµ½ËüÃÇ¡£

±í2.1 ͨÄÜÓïÑԹ淶ÖеÄÀàÐͺ͹¦ÄÜ

¡¤bool

¡¤char

¡¤byte

¡¤short

¡¤int

¡¤long

¡¤float

¡¤double

¡¤string

¡¤object(ËùÓжÔÏó֮ĸ)

Arrays(Êý×é)

Êý×éµÄάÊý±ØÐëÊÇÒÑÖªµÄ(>=1)£¬¶øÇÒ×îСϱêÊý±ØÐëΪ0¡£

ÔªËØÀàÐͱØÐëÊÇÒ»¸öCLSÀàÐÍ¡£

ÀàÐÍ(Types)

¿ÉÒÔ±»³éÏó»òÒþ²Ø¡£

Áã»ò¸ü¶àµÄ½Ó¿Ú¿ÉÒÔ±»ÊµÏÖ¡£²»Í¬µÄ½Ó¿ÚÔÊÐíÓµÓоßÓÐÏàͬÃû×ÖºÍÇ©ÃûµÄ·½·¨¡£ Ò»¸öÀàÐÍ¿ÉÒÔ׼ȷµØ´ÓÒ»¸öÀàÐÍÅÉÉú¡£ÔÊÐí³ÉÔ±±»¸²¸ÇºÍ±»Òþ²Ø¡£

¿ÉÒÔÓÐÁã»ò¸ü¶àµÄ³ÉÔ±£¬ËüÃÇÊÇÓò³ÉÔ±¡¢·½·¨¡¢Ê¼þ»òÕßÀàÐÍ¡£

ÀàÐÍ¿ÉÒÔÓµÓÐÁã»ò¸ü¶à¸ö¹¹Ô캯Êý¡£

Ò»ÖÖÀàÐ͵ĿɷÃÎÊÐÔ¿ÉÒÔÊǹ«¹²µÄ»òÕß¶ÔNGWS×é¼þÀ´ËµÊǾֲ¿µÄ£»µ«ÊÇ£¬Ö»Óй«¹²³ÉÔ±¿ÉÒÔÈÏΪÊÇÀàÐͽӿڵÄÒ»²¿·Ö¡£

ËùÓеÄÖµÐͱØÐë´ÓϵͳֵÐͼ̳С£Òì³£ÊÇÒ»¸öö¾Ù¡ª¡ªËü±ØÐë´Óϵͳö¾Ù(System Enum)¼Ì³Ð¡£

ÀàÐͳÉÔ±

ÀàÐͳÉÔ±ÔÊÐíÒþ²Ø»òÕ߸²¸ÇÁíÒ»ÖÖÀàÐÍÖÐµÄÆäËü³ÉÔ±¡£

²ÎÊýºÍ·µ»ØÖµµÄÀàÐͶ¼±ØÐëÊÇ CLS Э¶¨ÀàÐÍ¡£

¹¹Ô캯Êý¡¢·½·¨ºÍÊôÐÔ¿ÉÒÔ±»ÖØÔØ¡£

Ò»¸öÀàÐÍ¿ÉÒÔÓгéÏó³ÉÔ±£¬µ«½öµ±ÀàÐͲ»±»·âװʱ¡£

·½·¨

Ò»ÖÖ·½·¨¿ÉÒÔÊǾ²Ì¬¡¢ÐéÄâ»òÕßʵÀý¡£

ÐéÄâºÍʵÀý·½·¨¿ÉÒÔÊdzéÏóµÄ£¬»òÕßÊÇÒ»¸öʵÏÖ¡£¾²Ì¬·½·¨±ØÐë×ÜÓµÓÐÒ»¸öʵÏÖ¡£

ÐéÄâ·½·¨¿ÉÄÜÊÇ×îºóµÄ(»òÕß²»ÊÇ)¡£

Óò³ÉÔ±

¿ÉÒÔÊǾ²Ì¬»òÕßÊǷǾ²Ì¬¡£

¾²Ì¬Óò³ÉÔ±¿ÉÒÔ±»ÃèÊö»òÖ»³õʼ»¯¡£

ÊôÐÔ

µ±»ñÈ¡ºÍÉèÖ÷½·¨¶ø²»ÊÇʹÓÃÊôÐÔÓ﷨ʱ£¬ÊôÐÔ¿ÉÒÔ¹«¿ª¡£

»ñÈ¡µÄ·µ»ØÀàÐͺÍÉèÖ÷½·¨µÄµÚÒ»¸ö²ÎÊý±ØÐëÊÇÏàͬµÄCLSÀàÐÍ¡ª¡ªÊôÐÔµÄÀàÐÍ¡£

ÊôÐÔÃû×Ö±ØÐ벻ͬ£¬²»Í¬µÄÊôÐÔÀàÐÍÓÃÓÚÇø·ÖÊDz»³ä·ÖµÄ¡£

ÓÉÓÚʹÓ÷½·¨ÊµÏÖÊôÐÔ·ÃÎÊ£¬Èç¹û PropertyName ÊÇͬһ¸öÀàÖж¨ÒåµÄÒ»¸öÊôÐÔ£¬Äã²»ÄÜʵÏÖÃüÃûΪ get_PropertyName ºÍ set_PropertyName µÄ·½·¨¡£

ÊôÐÔ¿ÉÒÔ±»Ë÷Òý¡£

ÊôÐÔ·ÃÎʱØÐë×ñÑ­ÕâÖÖÃüÃû¸ñʽ£ºget_ProName£¬set_PropName¡£

ö¾Ù

Ç¿µ÷ÀàÐͱØÐëÊÇbyte¡¢short¡¢int »òlong¡£

ÿһ¸ö³ÉÔ±ÊÇÒ»¸öö¾ÙÀàÐ͵ľ²Ì¬ÃèÊöÓò³ÉÔ±

Ò»¸öö¾Ù²»ÄÜʵÏÖÈκνӿڡ£

ÄãÔÊÐí¸ø¶à¸öÓò³ÉÔ±É趨ÏàͬµÄÖµ¡£

Ò»¸öö¾Ù±ØÐë¼Ì³Ðϵͳö¾Ù(Òþº¬ÔÚC#ÖÐ)

Òì³£

¿ÉÒÔ±»Òý·¢ºÍ±»²¶»ñ¡£

×Ô¶¨ÒåÒì³£±ØÐë¼Ì³ÐϵͳÒì³£¡£

½Ó¿Ú

¿ÉÐèҪʵÏÖÆäËü½Ó¿Ú¡£

Ò»¸ö½Ó¿Ú¿ÉÒÔ¶¨ÒåÊôÐÔ¡¢Ê¼þºÍÐéÄâ·½·¨¡£ÊµÏÖÈ¡¾öÓÚÅÉÉúÀà¡£

ʼþ

Ҫô¶¼½øÐÐÔö¼Ó·½·¨ºÍÈ¡Ïû·½·¨£¬ÒªÃ´¶¼²»½øÐС£Ã¿Ò»ÖÖ·½·¨²ÉÓÃÒ»¸ö²ÎÊý£¬ËüÊÇ´Óϵͳ´ú±íÔª(System Delegate)ÅÉÉúÏÂÀ´µÄÒ»¸öÀà¡£

×Ô¶¨ÒåÊôÐÔ

¿ÉÒÔ½öʹÓÃÏÂÁÐÀàÐÍ£ºType(ÀàÐÍ),char, char, bool, byte, short, int, long, float, double, enum (Ò»ÖÖCLS ÀàÐÍ), and object.

´ú±íÔª(Delegates)

¿ÉÒÔ±»´´½¨ºÍ±»¼¤»î

±êʶ·û(Identifiers)

Ò»¸ö±êʶ·ûµÄµÚÒ»¸ö×Öĸ±ØÐëÀ´×ÔÒ»ÏÞÖÆ¼¯¡£

ͨ¹ý´óСдÔÚµ¥Ò»·¶Î§ÄÚ£¬²»¿ÉÄÜΨһµØÇø±ðÁ½¸ö»ò¸ü¶à¸ö±êʶ·û(´óСд²»Ãô¸Ð)¡£

2.2.4ÐéÄâÖ´ÐÐϵͳ(VES)

ÐéÄâÖ´ÐÐϵͳʵÏÖÁËÐéÄâ¶ÔÏóϵͳ¡£Í¨¹ýʵÏÖÒ»¸ö¸ºÔðNGWS runtimeµÄÖ´ÐÐÒýÇæ(execution engine£¬ËõдEE)´´½¨VES¡£Õâ¸öÖ´ÐÐÒýÇæÖ´ÐÐÓÉC#±àдºÍ±àÒëµÄÓ¦ÓóÌÐò¡£

ÏÂÁÐ×é¼þΪVESµÄÒ»²¿·Ö¡£ 1¡¢ÖмäÓïÑÔ(IL)¡ª¡ª±»Éè¼ÆÎªºÜÈÝÒ×±»¸÷ÖÖ¸÷ÑùµÄ±àÒëÆ÷Ëù¼æÈÝ ¡£Ôڸÿò¼ÜÖ®Í⣬C++¡¢VBºÍC#±àÒëÆ÷¶¼Äܹ»Éú³ÉIL¡£

2¡¢×°ÈëÊܹܴúÂ롪¡ª°üÀ¨½â¾öÄÚ´æÖеÄÃû×Ö¡¢ ±í²ãÀ࣬²¢ÇÒ´´½¨JIT±àÒëËù±ØÐèµÄ´æ¸ù¡£Í¨¹ýÖ´Ðо­³£ÐÔУÑ飬°üÀ¨¼ÓǿһЩ·ÃÎʹæÔò£¬Àà×°ÔØÆ÷ͬÑùÒ²ÔöÇ¿Á˰²È«ÐÔ¡£

3¡¢ÓÃJITת»»IL³Éԭʼ´úÂ롪¡ªIL´úÂë²¢²»ÊÇÉè¼Æ³ÉΪһÖÖ´«Í³µÄ½âÊÍ×Ö½Ú´úÂë»òÊ÷ÐÍ´úÂ룬ILת»»ÊÇÕæÕýµÄ±àÒë¡£

4¡¢×°ÈëÔªÊý¾Ý¡¢Ð£ÑéÀàÐͰ²È«ºÍ·½·¨µÄÍêÕûÐÔ

5¡¢À¬»øÊÕ¼¯(GC)ºÍÒì³£´¦Àí¡ª¡ªÁ½Õß¶¼ÊÇ»ùÓÚ¶ÑÕ»¸ñʽµÄ·þÎñ¡£ÊܹܴúÂëÔÊÐíÄ㶯̬µØ¸ú×Ù¶ÑÕ»¡£Òª¶¯Ì¬µØÊ¶±ð¸÷¸ö¶ÑÕ»¿ò¼Ü£¬JITter»òÆäËü±àÒëÆ÷±ØÐëÌṩһ¸ö´úÂë¹ÜÀíÆ÷¡£

6¡¢Ãè»æºÍ²é´í·þÎñ¡ª¡ªÁ½Õß¶¼È¡¾öÓÚÓÉÔ´ÓïÑÔ±àÒëÆ÷ËùÉú³ÉµÄÐÅÏ¢¡£±ØÐë·¢³öÁ½¸öÓ³É䣺һ¸öÓ³Éä´ÓÔ´ÓïÑԽṹ·¢µ½Ö¸ÁîÁ÷ÖеĵØÖ·£¬Ò»¸öÓ³Éä´ÓµØÖ··¢µ½¶ÑÕ»¿ò¼ÜÖеÄλÖᣵ±Ö´ÐдÓILµ½Ô­Ê¼´úÂëµÄת»»Ê±£¬ÕâЩӳÉä±»ÖØÐ¼ÆËã¡£

7¡¢¹ÜÀíÏ̺߳ÍÉÏÏÂÎÄ£¬»¹ÓÐÔ¶³Ì¹ÜÀí¡ª¡ªVESΪÊܹܴúÂëÌṩÕâЩ·þÎñ¡£

ËäÈ»Õâ¸öÇåµ¥²¢²»ÍêÕû£¬µ«Ëü×ãÒÔÈÃÄãÀí½âÔËÐÐʱ»ùÓÚµÄÓÉVESÌṩµÄµÍ²ã¼Ü¹¹¡£¿Ï¶¨½«»áÓÐרÃÅÌÖÂÛÔËÐÐʱµÄÊ飬¶øÕâ±¾ÊéÖ»ÉÔΪÉîÈëµØÍÚ¾ò¸÷ÖÖ»°Ìâ¡£

2.3 С½á

ÕâÒ»Õ£¬ÎÒ´øÄãµ½ÔËÐÐʱµÄÊÀ½çÒ»ÓΡ£ÃèÊöÁ˵±´´½¨¡¢±àÒëºÍÅäÖÃC#³ÌÐòʱËüÊÇÈçºÎ¹¤×÷µÄ¡£Äãѧ»áÁËÖмäÓïÑÔ(IL)£¬»¹ÓÐÔªÊý¾ÝÊÇÈçºÎÓÃÓÚÃèÊö±»±àÒëΪILµÄÀàÐÍ¡£ÔªÊý¾ÝºÍIL¶¼ÓÃÓÚJITter¼ì²âºÍÖ´ÐдúÂë¡£ÄãÉõÖÁ¿ÉÒÔÑ¡ÔñÓÃÄÄÒ»ÖÖJITterÀ´Ö´ÐÐÓ¦ÓóÌÐò¡£

ÔÚÕâÒ»Õµĵڶþ²¿·Ö£¬Éæ¼°µ½ÁËÔËÐÐʱΪºÎ°´ÕâÖÖ·½Ê½¹¤×÷µÄÀíÂÛ¡£Äãѧµ½ÁËÐéÄâ¶ÔÏóϵͳ(VOS)ÒÔ¼°×é³ÉËüµÄÄDz¿·Ö¡£¶ÔÓÚÀà¿âÉè¼ÆÕߣ¬ËûÃÇ×îΪ¸ÐÐËȤµÄ¾ÍÊÇͨÓÃÓïÑԹ淶(CLS)£¬ËüΪ»ùÓÚVOSµÄÓïÑÔЭͬ¹¤×÷É趨¹æÔò¡£×îºó£¬Äã¿´µ½ÁËÐéÄâÖ´ÐÐϵͳ(VES)ÈçºÎͨ¹ýNGWS runtimeʵÏÖVOS¡£

¡î¡î¡î¡î¡î¡î¡î¡î¡î¡î¡î¡î¡î¡î¡î¡î¡î¡î¡î¡î

µÚÈýÕ µÚÒ»¸öC#³ÌÐò¡¡¡¡¡¡¡¡»Ø¶¥²¿

3.0 Ñ¡ÔñÒ»¸ö±à¼­Æ÷

¾¡¹ÜÎÒÊÇÒ»¸öÍç¹ÌµÄNotepad¿ñ£¬µ«Õâ´ÎÎÒ²»½¨ÒéÓÃËü±à¼­Ô´Âë¡£Ô­ÒòÊÇÄãÕýÔÚÓëÕæÕýµÄ±à³ÌÓïÑÔ´ò½»µÀ£¬Ê¹ÓÃNotepad±à¼­Ô´Âë±àÒëʱ¿ÉÄܲúÉú´óÁ¿µÄ´íÎóÐÅÏ¢ÐÐ(C++³ÌÐòÔ±ÖªµÀÎÒÔÚ˵ʲô¡£)

ÄãÓм¸ÖÖÑ¡Ôñ¡£¿ÉÒÔÖØÐÂÅäÖÃÄãËùÐÅÈεÄÀÏʽVisual C++ 6.0£¬Ê¹ËüÄܹ»ºÍC#Ô´ÎļþÒ»Æð¹¤×÷¡£µÚ¶þÖÖÑ¡ÔñÊÇʹÓÃеÄVisual Studio 7¡£µÚÈý£¬Äã¿ÉÒÔÓÃÈκεÚÈý·½³ÌÐò±à¼­Æ÷£¬×îºÃÒªÖ§³ÖÐÐÊý¡¢É«²Ê±àÂë¡¢¹¤¾ß¼¯³ÉºÍÁ¼ºÃµÄËÑË÷¹¦ÄÜ¡£CodeWright¾ÍÊÇÆäÖÐÒ»¸öÀý×Ó£¬Èçͼ3.1Ëùʾ¡£

ͼ3.1 CodeWright ÊÇÄã¿ÉÒÔÓÃÓÚ´´½¨C#´úÂëÎļþÖÚ¶à¿ÉÄܱ༭Æ÷ÖеÄÒ»¸ö£¨ÂÔ£©¡£

µ±È»£¬ÔÚËùÌáµ½µÄ±à¼­Æ÷ÖУ¬Ã»ÓÐÒ»¸ö¶Ô´´½¨C#³ÌÐòÀ´ËµÊDZØÒªµÄ¡£ÓÃNotepad¿Ï¶¨¿ÉÒԱ༭¡£µ«ÊÇ£¬Èç¹ûÄ㿼Âǵ½Òª±àд¸ü´óµÄÏîÄ¿£¬×îºÃ»¹ÊÇÈÌÍ´¸î°®°É¡£


3.1 ¡°Hello World¡±´úÂë

ÉÏÃæÌÖÂ۱༭Æ÷ÓеãÀëÌâ £¬ÈÃÎÒÃǰѻ°Ìâת»Øµ½Ò»¸ö·Ç³£³öÃûµÄС³ÌÐò¡£Õâ¸ö×î¶ÌµÄC#°æ±¾³ÌÐò¼ûÇåµ¥3.1¡£°ÑËü´æÆðÀ´(×¢£º³ÌÐòÖв»Äܺ¬ÓÐÐкÅ)£¬ÎļþÃûΪ helloworld.cs£¬ÒÔʹÄãÄܰ´ÕÕ˵Ã÷£¬Íê³ÉÖîÈç±àÒë³ÌÐòµÈÆäËüÓàÏÂÀ´µÄ²½Öè¡£ Çåµ¥ 3.1 ×î¼òµ¥µÄ ¡°Hello World ¡±³ÌÐò

1: class HelloWorld

2: {

3: public static void Main()

4: {

5: System.Console.WriteLine("Hello World");

6: }

7: }

ÔÚC#ÖУ¬´úÂë¿é(Óï¾ä×é)ÓÉ»¨À¨»¡¡°{¡±ºÍ¡°}¡±ËùÀ¨×¡¡£ËùÒÔ£¬¼´Ê¹ÄãÒÔǰûÓÐʹÓÃC++µÄ¾­Ñ飬Ҳ¿ÉÒÔÖ¸³öMain()·½·¨¾ÍÊÇHelloWorld ÀàÓï¾äµÄÒ»²¿·Ö£¬ÒòΪÀà±»À¨ÔÚËù¶¨ÒåµÄ»¨À¨»¡ÖС£

C#Ó¦ÓóÌÐò(¿ÉÖ´ÐÐ)µÄÈë¿Úµã¾ÍÊÇ static Main ·½·¨£¬Ëü±ØÐë°üº¬ÔÚÒ»¸öÀàÖС£Ö»ÓÐÒ»¸öÀàÄÜʹÓøñêÖ¾¶¨Ò壬³ý·ÇÄã¸æËß±àÒëÆ÷ËüӦʹÓÃÄÄÒ»¸ö Main ·½·¨(·ñ²à£¬»á²úÉúÒ»¸ö±àÒë´íÎó)¡£

ºÍC++Ïà±È£¬MainµÄµÚÒ»¸ö×ÖĸÊÇ´óдµÄM£¬¶ø²»ÊÇÄãÔø¾­Ê¹ÓùýµÄСд×Öĸ¡£ÄãµÄ³ÌÐò¿ªÊ¼Óڸ÷½·¨£¬Ò²½áÊøÓڸ÷½·¨¡£·½·¨ÖпÉÒÔµ÷ÓÃÆäËü·½·¨¡ª¡ªÈçÕâ¸öÀý×ÓÖУ¬ÓÃÓÚÊä³öÎı¾¡ª¡ª»òÕß´´½¨¶ÔÏó²¢¼¤»î¸Ã·½·¨¡£

ÕýÈçÄãËù¿´µ½µÄ£¬Main·½·¨ÓÐÒ»¸övoid ·µ»ØÀàÐÍ¡£

public static void Main()

¾¡¹Ü¿´µ½ÕâЩÓï¾äʱ£¬C++³ÌÐòÔ±¿Ï¶¨»áÓбöÖÁÈç¹éµÄ¸Ð¾õ£¬µ«ÊÇÆäËû³ÌÐòÔ±²¢²»Èç´Ë¡£Ê×ÏÈ£¬public µÄ·ÃÎʱêÖ¾¸æËßÎÒÃÇÕâ¸ö·½·¨¿ÉÒÔ±»ÈκγÌÐò·ÃÎÊ£¬ÕâÊÇËü±»µ÷ÓõıØÒªÌõ¼þ¡£Æä´Î£¬static Òâζ×ÅûÓÐÏÈ´´½¨ÀàµÄʵÀýÒ²¿ÉÒÔµ÷Ó÷½·¨¡ª¡ªÄãËùÒª×öµÄ¾ÍÊÇÓÃÀàÃûµ÷Ó÷½·¨¡£

HelloWorld.Main();

µ«ÊÇ£¬ÎÒ²»ÔÞ³ÉÔÚMain·½·¨ÖÐÖ´ÐÐÕâÐдúÂ룬µÝ¹é»áµ¼Ö¶ÑÕ»Òç³ö¡£

ÁíÒ»ÖØÒªµÄ·½ÃæÊÇ·µ»ØÀàÐÍ¡£¶ÔÓÚ·½·¨Main£¬¿ÉÑ¡Ôñvoid (Òâζןù±¾¾ÍûÓзµ»ØÖµ)£¬»òÓÃint ΪÕûÐͽá¹û(³ÌÐò·µ»ØµÄ´íÎó´úÂë)¡£Òò´Ë£¬ÓÐÁ½ÖÖ¿ÉÄܵÄMain·½·¨£º

public static void Main()

public static int Main()

C++³ÌÐòԱͬÑù»áÃ÷°×ÏÂÎÄÎÒÒªÌáµ½µÄ¡ª¡ª¿ÉÒÔ´«µÝ¸ø³ÌÐòµÄÃüÁîÐвÎÊýÊý×é¡£È磺 public static void Main(string[] args)

ÎÒÏÖÔÚ²¢²»ÏëÏêϸµØËµÃ÷ÈçºÎ·ÃÎʲÎÊý£¬µ«ÎÒÏëÊÂÏȸøC++³ÌÐòÔ±Ò»¸ö¾¯¸æ£ººÍC++Ïà±È£¬³ÌÐò·¾¶²»ÊÇÕâ¸öÊý×éµÄÒ»²¿·Ö¡£½ö½öÄÇЩ²ÎÊý°üº¬ÔÚÕâ¸öÊý×éÖС£

ÔÚ¶ÔMain·½·¨²¢²»¼ò¶ÌµÄ½éÉÜÖ®ºó£¬ÈÃÎÒÃǰÑ×¢ÒâÁ¦¼¯Öе½Î¨Ò»ÕæÕýµÄ´úÂëÐСª¡ªÕâÐдúÂëÔÚÆÁÄ»ÉÏÏÔʾ¡°Hello Wold¡±¡£

System.Console.WriteLine("Hello World");

¼ÙÈç²»ÊÇÓÉÓÚÓÐÁËSystem£¬´ó¼Ò»áÂíÉϲµ½WriteLineÊÇConsole ¶ÔÏóµÄÒ»¸ö¾²Ì¬·½·¨¡£ÄÇôSystem´ú±íÊ²Ã´ÄØ? ËüÊǰüº¬Console¶ÔÏóµÄÃû×Ö¿Õ¼ä(·¶Î§)£¬Êµ¼ÊÉϲ¢²»ÊÇÿ´Î¶¼ÔÚConsole¶ÔÏóǰ¼ÓÉÏÃû×Ö¿Õ¼äµÄǰ׺£¬Äã¿ÉÒÔÏóÇåµ¥3.2Ëùʾ·¶µÄÄÇÑù£¬ÔÚ³ÌÐòÖÐÒýÈëÃû×ֿռ䡣

Çåµ¥3.2 ÔÚ³ÌÐòÖÐÒýÈëÃû×Ö¿Õ¼ä

1: using System;

2:

3: class HelloWorld

4: {

5: public static void Main()

6: {

7: Console.WriteLine("Hello World");

8: }

9: }

ÄãËùÒª×öµÄ¾ÍÊǸøSystemÃû×Ö¿Õ¼ä¼ÓÒ»¸öusingÖ¸Áî¡£ÔÚÕâÖ®ºó£¬²»ÔÙÐèÒª¹æ¶¨Ãû×ֿռ䣬¾Í¿ÉÒÔʹÓÃËüÃǵķ½·¨ºÍÊôÐÔÁË¡£NGWS ¿ò¼ÜÌåϵÖÐÓкܶàµÄÃû×ֿռ䣬ÎÒÖ»¶Ô¾Þ´óµÄÃû×Ö¿Õ¼ä³ØÖеÄÉÙÊý¼¸¸ö¶ÔÏó½øÐÐ̽ÌÖ¡£µ«ÔÚµÚ°ËÕ ¡°ÓÃC#д×é¼þ¡±½«½éÉÜÈçºÎΪÄãµÄ¶ÔÏó´´½¨×Ô¼ºµÄÃû×ֿռ䡣

3.2 ±àÒë³ÌÐò

ÓÉÓÚNGWS RuntimeÖ§³ÖËùÓеıàÒëÆ÷(VB¡¢C++ºÍC#)£¬Äã²»±ØÂòÒ»¸öµ¥¶ÀµÄ¿ª·¢¹¤¾ßÓÃÀ´°ÑÓ¦ÓóÌÐò±àÒë³ÉIL(ÖмäÓïÑÔ)¡£µ«ÊÇ£¬Èç¹ûÄã´ÓûÓÐʹÓÃÃüÁîÐбàÒëÆ÷±àÒë¹ý³ÌÐò(½ö¶®µÃ±àÒëÃû£¬¶øÃ»ÓÐÊì¼Ç)£¬ Ëü»¹ÊÇÄãµÄÊ×ҪѡÔñ¡£

´ò¿ªÃüÁîÌáʾ·û²¢Çл»µ½´æ·Åhelloworld.cs µÄĿ¼¡£ÇÃÈëÒÔÏÂÃüÁ

csc helloworld.cs

helloworld.cs ±»±àÒë²¢Á´½Ó³Éhellworld.exe¡£ÒòΪԴÂëûÓдíÎó(Äǵ±È»)£¡ C#±àÒëÆ÷ûÓгö´íÌáʾ£¬ÔÚÕû¸ö±àÒë¹ý³ÌûÓÐË¿ºÁÍ£¶Ù¡£Èçͼ3.2Ëùʾ¡£

ͼ3.2 ʹÓÃÃüÁîÐбàÒëÆ÷ csc.exe ±àÒëÓ¦ÓóÌÐò

 

ÏÖÔÚÄãÒѾ­×¼±¸ºÃÔËÐеÚÒ»¸öÕæÕýÓÃC#±àдµÄ³ÌÐò¡£¼òµ¥µØÔÚÃüÁîÐÐÉÏÇÃÈëhelloworld£¬Êä³ö½á¹ûΪ ¡°Hello World¡±¡£

ÔÚ¼ÌÐøÍùϽéÉÜ֮ǰ£¬ ÎÒÏë¼òµ¥µØËµÃ÷һϱàÒëÆ÷¿ª¹ØµÄÒ»¸öÓ÷¨£º

csc /out:hello.exe helloworld.cs

Õâ¸ö¿ª¹Ø¸æËß±àÒëÆ÷Êä³öÎļþÃüÃûΪhello.exe¡£ËäÈ»Õâ²»ÊÇʲô¾øÕУ¬µ«ËüÊÇÒÔºóÕâ±¾ÊéÖÐÓõ½µÄ±àÒëÆ÷µÄ»ù±¾¹¦¡£

3.3 ÊäÈëºÍÊä³ö

µ½Ä¿Ç°ÎªÖ¹£¬ÎÒ½ö½öÑÝʾÁ˰Ѽòµ¥µÄ³£Á¿×Ö·û´®Êä³öµ½ÆÁÄ»¡£¾¡¹ÜÕâ±¾ÊéÖ»½éÉÜÁËC#±à³ÌµÄ¸ÅÄî¶ø²»½éÉÜÓû§½Ó¿Ú±à³Ì£¬µ«ÎÒÏëʹÄãÄÜѸËÙÕÆÎÕ¼òµ¥µÄ¿ØÖÆÌ¨ÊäÈëºÍÊä³ö·½·¨¡ª¡ªÏàÓ¦ÓÚCµÄscanf ºÍ printf£¬»òÕßC++µÄcin ºÍcout¡£ÎÒ²»ÄÜÌṩVBÏàÓ¦µÄº¯Êý£¬ÒòΪ¿ØÖÆÌ¨·ÃÎʲ»ÊǸúËÐÄÓïÑÔµÄÒ»²¿·Ö¡£

ÄãÖ»ÐèÒªÄܹ»¶ÁÈ¡Óû§µÄÊäÈ룬²¢ÌáʾһЩÐÅÏ¢¸øÓû§¡£Çåµ¥3.3 ˵Ã÷ÈçºÎ¶Áȡһ¸öÓû§ÇëÇóµÄÃû×ÖÊäÈ룬²¢ÏÔʾһÌõÒѶ¨ÖƵġ°Hello¡±ÐÅÏ¢¡£

Listing 3.3 ´Ó¿ØÖÆÌ¨¶ÁÊäÈëÐÅÏ¢

1: using System;

2:

3: class InputOutput

4: {

5: public static void Main()

6: {

7: Console.Write("Please enter your name: ");

8: string strName = Console.ReadLine();

9: Console.WriteLine("Hello " + strName);

10: }

11: }

µÚ7ÐÐʹÓÃConsole¶ÔÏóµÄÒ»¸öз½·¨£¬ÓÃÓÚÏòÓû§ÌáʾÎı¾ÐÅÏ¢£¬Ëü¾ÍÊÇWrite·½·¨¡£ËüÓëWriteLine²»Í¬µÄµØ·½ÔÚÓÚËüÊä³öʱ²»»»ÐС£Ê¹ÓÃÕâÖÖ·½·¨ÒÔ±ãÓû§¿ÉÒÔÔÚÐÅÏ¢ÌáʾµÄͬһÐÐÊäÈëÃû×Ö¡£ ÔÚÓû§ÊäÈëËûµÄÃû×Öºó(²¢°´»Ø³µ¼ü)£¬ReadLine ·½·¨¶ÁÈëÁËÒ»¸ö×Ö·û´®±äÁ¿¡£Ãû×Ö×Ö·û´®Á¬½Óµ½³£Á¿×Ö·û´®¡°Hello¡±£¬²¢ÓÃÎÒÃÇÔçÒÑÊìϤµÄWriteLine·½·¨ÏÔʾ³öÀ´(¼ûͼ3.3)

 

Ä㼸ºõÒÑѧÍêÁËNGWS¿ò¼Ü±ØÒªµÄÊäÈëºÍÊä³öº¯Êý¡£µ«ÊÇ£¬Ä㻹ÐèҪΪÓû§ÏÔʾ¶à¸öÖµ¡£ÎªÓû§Ð´Ò»¸ö¸ñʽ´®¡£Çåµ¥3.4ÏÔʾһ¸öÀý×Ó¡£

Çåµ¥ 3.4 ʹÓò»Í¬µÄÊä³ö·½·¨

1: using System;

2:

3: class InputOutput

4: {

5: public static void Main()

6: {

7: Console.Write("Please enter your name: ");

8: string strName = Console.ReadLine();

9: Console.WriteLine("Hello {0}",strName);

10: }

11: }

µÚ9Ðаüº¬ÁËʹÓøñʽ´®µÄConsole.WriteLineÓï¾ä¡£¸ñʽ´®Àý×ÓÈçÏ£º

"Hello {0}"

{0}´úÌæWriteLine·½·¨µÄ²ÎÊý±íÖнôËæ¸ñʽ´®ºóµÄµÚÒ»¸ö±äÁ¿¡£Äã¿ÉÒÔÓøü¼Êõ¸ñʽ»¯²»³¬¹ýÈý¸ö±äÁ¿¡£

Console.WriteLine("Hello {0} {1}, from {2}",

strFirstname, strLastname, strCity);

µ±È»£¬²¢²»½öÏÞÓÚֻʹÓÃ×Ö·û´®±äÁ¿¡£Äã¿ÉÒÔʹÓÃÈκÎÀàÐÍ£¬ÕâЩÀàÐÍÔÚºóÃæµÄµÚËÄÕ¡°C#ÀàÐÍ¡±ÖÐÓÐÌÖÂÛ¡£

3.3 Ìí¼Ó×¢ÊÍ

µ±±àд´úÂëʱ£¬ÄãӦΪ´úÂëдעÊÍÌõÎÄ£¬½âÊÍʵÏÖµÄÄÚÈÝ¡¢±ä¸üÊ·µÈ¡£¾¡¹ÜÄã×¢ÊÍÖÐÌṩµÄÐÅÏ¢(Èç¹ûÓеϰ)ÊÇд¸ø×Ô¼º¿´µÄ£¬µ«ÊÇÄ㻹ÊDZØÐë×ñÊØÐ´C#×¢Ê͵ķ½·¨¡£Çåµ¥3.5 ÏÔʾËù²ÉÓõÄÁ½ÖÖ²»Í¬µÄ·½Ê½¡£

Çåµ¥3.5 ¸ø´úÂëÌí¼Ó×¢ÊÍ

1: using System;

2:

3: class HelloWorld

4: {

5: public static void Main()

6: {

7: // ÕâÊǵ¥ÐÐ×¢ÊÍ

8: /* ÕâÖÖ×¢ÊÍ

9: ¿çÔ½¶àÐÐ */

10: Console.WriteLine(/*"Hello World"*/);

11: }

12: }

¡°//¡± ·ûºÅÓÃÓÚµ¥ÐÐ×¢ÊÍ¡£Äã¿ÉÒÔÓá°//¡±×¢Ê͵±Ç°ËùÔÚÐУ¬»òÊǸúÔÚÒ»¸ö´úÂëÓï¾äµÄºóÃæ£º

int nMyVar = 10; // ºú˵°ËµÀ

ËùÓÐÔÚ¡°//¡±Ö®ºóµÄ×Ö·û±»ÈÏΪÊÇÒ»Ìõ×¢ÊÍ£»ËùÒÔ£¬Äã¿ÉÒÔͬÑùÓÃËüÃÇÀ´×¢ÊÍÒ»ÕûÐдúÂë»òÒ»ÐÐÖеIJ¿·Ö´úÂë¡£ÕâÖÖ×¢ÊÍ·½Ê½Í¬C++ÖнéÉܵÄÏàËÆ¡£

Èç¹ûÄãµÄ×¢ÊÍ¿çÔ½¶àÐУ¬±ØÐëʹÓá°/* */¡±Õâ¶Ô·ûºÅ×éºÏ¡£ÕâÖÖ·½Ê½ÔÚCÖÐÓÐЧ¡£³ýÁ˵¥ÐÐ×¢ÊÍÍ⣬ÕâÖÖ·½Ê½ÔÚC++ºÍC#Öл¹Í¬ÑùÓÐÓá£ÒòC/C++ºÍC#¶¼Ê¹ÓÃÕâÖÖ¶àÐÐ×¢ÊÍ·½Ê½£¬ËùÒÔËüÃÇҲʹÓÃÏàͬµÄ½áÊø·û¡£Çë¿´ÏÂÁдúÂëÐУº

/* Console.WriteLine("Hello World"); */

ÎÒÀûÓá°/* */¡±¼òµ¥µØ×¢ÊÍÒ»ÕûÐС£ÏÖÔÚÎÒ¼Ù¶¨ÕâÒ»ÐÐÊǺܳ¤´úÂëµÄÒ»²¿·Ö£¬¶øÇÒÎÒ¾ö¶¨ÒªÔÝʱ½ûÓÃÒ»¸ö³ÌÐò¿é£º

/*

...

/* Console.WriteLine("Hello World"); */

...

*/

ÕâÖֽṹËù´æÔÚµÄÎÊÌâΪ£º ¡°Hello World¡±ÄÇÒ»ÐкóÃæµÄ¡°*/¡±ÖÕÖ¹ÁËʼÓÚµÚÒ»Ðеġ°/*¡±µÄ×¢ÊÍ£¬ÓàϵĴúÂë¶Ô±àÒëÆ÷ÓÐЧ£¬Ä㽫¿´µ½Ò»Ð©ÓÐȤµÄ³ö´íÐÅÏ¢¡£ÖÁÉÙ×îºóµÄ¡°*/¡±±»±ê־Ϊ¹éÊô´íÎó¡£ÎÒÖ»Ïë˳±ãÌáÐÑÄ㣬ÈÃÄã×¢ÒâÕâÖÖ´íÎó¡£

3.4 С½á

ÔÚÕâÒ»ÕÂÖУ¬Äã´´½¨¡¢±àÒë²¢Ö´ÐÐÁ˵ÚÒ»¸öC#³ÌÐò£ºÖøÃûµÄ¡°Hello World¡±³ÌÐò¡£ÎÒÀûÓÃÕâ¸ö¼ò¶ÌµÄ³ÌÐòΪÄã½éÉÜÁËÓйØMain·½·¨£¬ËüÊÇÒ»¸ö³ÌÐòµÄÈë¿Úµã£¬Ò²Êdzö¿Úµã¡£¸Ã·½·¨¿ÉÒÔûÓзµ»ØÖµ»ò·µ»ØÒ»¸öÕûÊý´íÎó´úÂë¡£Èç¹ûÄãµÄ³ÌÐòÓòÎÊýµ÷Óã¬Äã¿ÉÒÔ(µ«²»±ØÒª)¶ÁÈ¡²¢Ê¹ÓÃËüÃÇ¡£

ÔÚ±àÒëºÍ²âÊÔ³ÌÐòÖ®ºó£¬Äãѧµ½Á˸ü¶àµÄÓÉConsole¶ÔÏóÌṩµÄÓйØÊäÈëºÍÊä³öµÄ·½·¨¡£¶ÔÓÚѧϰC#¶øÑÔ£¬ËüÃÇ×ãÒÔ´´½¨³öÓÐÒâÒåµÄ¿ØÖÆÌ¨³ÌÐò£¬¶øÓû§½Ó¿ÚµÄ´ó²¿·Ö½«ÓÃÓÚWFC¡¢WinForms»òÕßASP+¡£

µÚËÄÕ C#ÀàÐÍ¡¡¡¡¡¡¡¡»Ø¶¥²¿

¼ÈÈ»ÄãÒѾ­ÖªµÀÈçºÎ´´½¨Ò»¸ö¼òµ¥µÄC#³ÌÐò£¬ÄÇôÎÒ½«»á¸øÄã½éÉÜC#µÄÀàÐÍϵͳ¡£ÔÚÕâÒ»ÕÂÖУ¬Äãѧµ½ÈçºÎʹÓò»Í¬µÄÖµºÍÒýÓÃÀàÐÍ£¬¼Ó¿òºÍÏû¿ò»úÖÆÄÜΪÄã×÷Щʲô¡£¾¡¹ÜÕâÒ»ÕµIJ¢²»²àÖØÓÚÀý×Ó£¬µ«Ä㻹¿ÉÒÔѧµ½ºÜ¶àÖØÒªµÄ¡¢¹ØÓÚÈçºÎʹÓÃÏÖ³ÉÀàÐÍ´´½¨³ÌÐòµÄ֪ʶ¡£

4.1 ÖµÀàÐÍ

¸÷ÖÖÖµÀàÐÍ×ÜÊǺ¬ÓÐÏàÓ¦¸ÃÀàÐ͵ÄÒ»¸öÖµ¡£C#ÆÈʹÄã³õʼ»¯±äÁ¿²ÅÄÜʹÓÃËüÃǽøÐмÆË㡪¡ª±äÁ¿Ã»Óгõʼ»¯²»»á³öÎÊÌ⣬ÒòΪµ±ÄãÆóͼʹÓÃËüÃÇʱ£¬±àÒëÆ÷»á¸æËßÄã¡£

ÿµ±°ÑÒ»¸öÖµ¸³¸øÒ»¸öÖµÀàÐÍʱ£¬¸Ãֵʵ¼ÊÉϱ»¿½±´ÁË¡£Ïà±È£¬¶ÔÓÚÒýÓÃÀàÐÍ£¬½öÊÇÒýÓñ»¿½±´ÁË£¬¶øÊµ¼ÊµÄÖµÈÔÈ»±£ÁôÔÚÏàͬµÄÄÚ´æÎ»Ö㬵«ÏÖÔÚÓÐÁ½¸ö¶ÔÏóÖ¸ÏòÁËËü£¨ÒýÓÃËü£©¡£C#µÄÖµÀàÐÍ¿ÉÒÔ¹éÀàÈçÏ£º

¡¤¼òµ¥ÀàÐÍ£¨Simple types £©

¡¤½á¹¹ÀàÐÍ£¨struct types£©

¡¤Ã¶¾ÙÀàÐÍ£¨Enumeration types£©

4.1.1 ¼òµ¥ÀàÐÍ

ÔÚC#ÖгöÏֵļòµ¥ÀàÐ͹²ÏíÒ»Ð©ÌØÐÔ¡£µÚÒ»£¬ËüÃǶ¼ÊÇ.NETϵͳÀàÐ͵ıðÃû¡£µÚ¶þ£¬Óɼòµ¥ÀàÐÍ×é³ÉµÄ³£Á¿±í´ïʽ½öÔÚ±àÒëʱ¶ø²»ÊÇÔËÐÐʱÊܼì²é¡£×îºó£¬¼òµ¥ÀàÐÍ¿ÉÒÔ°´×ÖÃæ±»³õʼ»¯¡£ÒÔÏÂΪC#¼òµ¥ÀàÐ͹éÀࣺ

¡¤ÕûÐÍ

¡¤²¼¶ûÐÍ

¡¤×Ö·ûÐÍ (ÕûÐ͵ÄÒ»ÖÖÌØÊâÇé¿ö)

¡¤¸¡µãÐÍ

¡¤Ð¡ÊýÐÍ

4.1.1.1 ÕûÐÍ

C#ÖÐÓÐ9¸öÕûÐÍ¡£ sbyte ¡¢byte¡¢ short¡¢ ushort¡¢ int¡¢ uint¡¢ long¡¢ ulong ºÍ char£¨µ¥¶ÀÒ»½ÚÌÖÂÛ£©¡£ËüÃǾßÓÐÒÔÏÂÌØÐÔ£º

¡¤sbyteÐÍ´ú±íÓзûºÅ8λÕûÊý£¬È¡Öµ·¶Î§ÔÚ-128~127Ö®¼ä¡£

¡¤bytetÐÍ´ú±íÎÞ·ûºÅ16λÕûÊý£¬È¡Öµ·¶Î§ÔÚ0~255Ö®¼ä¡£

¡¤shortÐÍ´ú±íÓзûºÅ16λÕûÊý£¬È¡Öµ·¶Î§ÔÚ-32,768~32,767Ö®¼ä¡£

¡¤ushortÐÍ´ú±íÎÞ·ûºÅ16λÕûÊý£¬È¡Öµ·¶Î§ÔÚ0~65,535Ö®¼ä¡£

¡¤intÐÍ´ú±íÓзûºÅ32λÕûÊý£¬È¡Öµ·¶Î§ÔÚ-2,147,483,648~ 2,147,483,647Ö®¼ä¡£

¡¤uintÐÍ´ú±íÎÞ·ûºÅ32λÕûÊý£¬È¡Öµ·¶Î§ÔÚ 0 ~ 4,294,967,295Ö®¼ä¡£

¡¤longÐÍ´ú±í64λÓзûºÅÕûÊý£¬È¡Öµ·¶Î§ÔÚ-9,223,372,036,854,775,808~ 9,223,372,036,854,775,807Ö®¼ä¡£

¡¤ulongÐÍΪ64λÎÞ·ûºÅÕûÊý£¬È¡Öµ·¶Î§ÔÚ0 ~ 18,446,744,073,709,551,615Ö®¼ä¡£

VBºÍC³ÌÐòÔ±¶¼¿ÉÄÜ»á¶ÔintºÍlongÊý¾ÝÀàÐÍËù´ú±íµÄз¶Î§¸Ðµ½¾ªÑÈ¡£ºÍÆäËüµÄ±à³ÌÓïÑÔÏà±È£¬ÔÚC#ÖУ¬int²»ÔÙÈ¡¾öÓÚÒ»¸ö»úÆ÷µÄ×Ö£¨word)µÄ´óС£¬¶ølong±»Éè³É64λ¡£

4.1.1.2 ²¼¶ûÐÍ

²¼¶ûÊý¾ÝÀàÐÍÓÐtrueºÍfalseÁ½¸ö²¼¶ûÖµ¡£¿ÉÒÔ¸³true»òfalseÖµ¸øÒ»¸ö²¼¶û±äÁ¿£¬Ò²¿ÉÒÔ°ÑÒ»¸ö±í´ïʽ¸³¸ø±äÁ¿£¬ÆäÖµµÈÓÚ±í´ïʽËùÇó³öµÄÖµ£º

bool bTest = (80 > 90);

ÓëCºÍC++Ïà±È£¬ÔÚC#ÖУ¬trueÖµ²»ÔÙΪÈκηÇÁãÖµ¡£²»ÒªÎªÁËÔö¼Ó·½±ã¶ø°ÑÆäËüÕûÐÍת»»³É²¼¶ûÐÍ¡£

4.1.1.3 ×Ö·ûÐÍ

×Ö·ûÐÍΪһ¸öµ¥Unicode ×Ö·û¡£Ò»¸öUnicode×Ö·û16볤£¬Ëü¿ÉÒÔÓÃÀ´±íʾÊÀ½çÉÏ´ó¶àÊýµÄÓïÑÔ¡£¿ÉÒÔ°´ÒÔÏ·½·¨¸øÒ»¸ö×Ö·û±äÁ¿¸³Öµ£º

char chSomeChar = 'A';

³ý´ËÖ®Í⣬¿ÉÒÔͨ¹ýÊ®Áù½øÖÆ×ªÒå·û£¨Ç°×º\x£©»òUnicode±íʾ·¨¸ø±äÁ¿¸³Öµ£¨Ç°×º\u£©£º

char chSomeChar = '\x0065';

char chSomeChar = '\u0065';

²»´æÔÚ°Ñcharת»»³ÉÆäËüÊý¾ÝÀàÐ͵ÄÒþʽת»»¡£Õâ¾ÍÒâζ×Å£¬ÔÚC#ÖаÑÒ»¸ö×Ö·û±äÁ¿µ±×÷ÁíÒ»¸öÕûÊýÊý¾ÝÀàÐÍ¿´´ýÊÇÐв»Í¨µÄ¡ª¡ªÕâÊÇC³ÌÐòÔ±±ØÐë¸Ä±äϰ¹ßµÄÁíÒ»¸ö·½Ãæ¡£µ«ÊÇ£¬¿ÉÒÔÔËÓÃÏÔʽת»»£º

char chSomeChar = (char)65;

int nSomeInt = (int)'A';

ÔÚCÖÐÈÔÈ»´æÔÚ×ÅתÒå·û£¨×Ö·ûº¬Ò壩¡£Òª»»»»ÄԽÇë¿´±í4.1¡£

Table 4.1 תÒå·û£¨ Escape Sequences£©

תÒå·û
×Ö·ûÃû

\'
µ¥ÒýºÅ

\"
Ë«ÒýºÅ

\\
·´Ð±¸Ü

\0
¿Õ×Ö·û

\a
¸Ð̾ºÅ

\b
Í˸ñ

\f
»»Ò³

\n
ÐÂÐÐ

\r
»Ø³µ

\t
ˮƽ tab

\v
´¹Ö±tab





 

4.1.1.4 ¸¡µãÐÍ

Á½ÖÖÊý¾ÝÀàÐͱ»µ±×÷¸¡µãÐÍ£ºfloatºÍdouble¡£ËüÃǵÄÇø±ðÔÚÓÚȡֵ·¶Î§ºÍ¾«¶È£º

float: ȡֵ·¶Î§ÔÚ 1.5x10-45~ 3.4x1038Ö®¼ä£¬ ¾«¶ÈΪ7λÊý¡£

double: ȡֵ·¶Î§ÔÚ 5.0x10-324 ~ 1.7x10308Ö®¼ä£¬ ¾«¶ÈΪ 15~16 λÊý¡£

µ±ÓÃÁ½ÖÖ¸¡µãÐÍÖ´ÐÐÔËËãʱ£¬¿ÉÒÔ²úÉúÒÔϵÄÖµ£º

ÕýÁãºÍ¸ºÁã

ÕýÎÞÇîºÍ¸ºÎÞÇî

·ÇÊý×ÖÖµ£¨Not-a-Number£¬ËõдNaN£©

·ÇÁãÖµµÄÓÐÏÞÊý¼¯

ÁíÒ»¸öÔËËã¹æÔòΪ£¬µ±±í´ïʽÖеÄÒ»¸öÖµÊǸ¡µãÐÍʱ£¬ËùÓÐÆäËüµÄÀàÐͶ¼Òª±»×ª»»³É¸¡µãÐͲÅÄÜÖ´ÐÐÔËËã¡£

4.1.1.5 СÊýÐÍ£¨The decimal Type£©

СÊýÐÍÊÇÒ»Öָ߾«¶È¡¢128λÊý¾ÝÀàÐÍ£¬Ëü´òËãÓÃÓÚ½ðÈںͻõ±ÒµÄ¼ÆËã¡£ËüËù±íʾµÄ·¶Î§´Ó´óÔ¼1.0x10-28 µ½ 7.9x1028£¬¾ßÓÐ28ÖÁ29λÓÐЧÊý×Ö¡£Òª×¢Ò⣬¾«¶ÈÊÇÒÔÊ®½øÖÆÎ»Êý (digits)±íʾ£¬²»ÊÇСÊý루decimal places£©¡£ÔËËã×î¶à¾«È·µ½Ð¡Êýµãºó28λ¡£

ÕýÈçÄãËù¿´µ½µÄ£¬decimalµÄȡֵ·¶Î§±ÈdoubleµÄ»¹Õ­£¬µ«Ëü¸ü¾«È·¡£Òò´Ë£¬Ã»ÓÐdecimalºÍdoubleÖ®¼äµÄÒþʽת»»¡ª¡ªÍùÒ»¸ö·½Ïòת»»¿ÉÄÜ»áÒç³ö£¬ÍùÁíÍâÒ»¸ö·½Ïò¿ÉÄܻᶪʧ¾«¶È¡£Äã²»µÃ²»ÔËÓÃÏÔʽת»»¡£

µ±¶¨ÒåÒ»¸ö±äÁ¿²¢¸³Öµ¸øËüʱ£¬Ê¹Óà m ºó׺ÒÔ±íÃ÷ËüÊÇÒ»¸öСÊýÐÍ£º

decimal decMyValue = 1.0m;

Èç¹ûÊ¡ÂÔÁËm£¬ÔÚ±äÁ¿±»¸³ÖµÖ®Ç°£¬Ëü½«±»±àÒëÆ÷ÈÏ×÷doubleÐÍ¡£

4.1.2 ½á¹¹ÀàÐÍ

Ò»¸ö½á¹¹ÀàÐÍ¿ÉÒÔÉùÃ÷¹¹Ô캯Êý¡¢³£Êý¡¢¾²Ì¬×ֶΡ¢·½·¨¡¢ÊôÐÔ¡¢Ë÷Òý¡¢²Ù×÷·ûºÍǶÌ×ÀàÐÍ¡£¾¡¹ÜÁгöÀ´µÄ¹¦ÄÜ¿´ÆðÀ´ÏóÒ»¸ö³ÉÊìµÄÀ࣬µ«ÔÚC#ÖУ¬½á¹¹ºÍÀàµÄÇø±ðÔÚÓڽṹÊÇÒ»¸öÖµÀàÐÍ£¬¶øÀàÊÇÒ»¸öÒýÓÃÀàÐÍ¡£ÓëC++Ïà±È£¬ÕâÀï¿ÉÒÔÓýṹ¹Ø¼ü×Ö¶¨ÒåÒ»¸öÀà¡£

ʹÓýṹµÄÖ÷Ҫ˼ÏëÊÇÓÃÓÚ´´½¨Ð¡Ð͵ĶÔÏó£¬ÈçPointºÍFileInfoµÈµÈ¡£Äã¿ÉÒÔ½ÚÊ¡Äڴ棬ÒòΪûÓÐÈçÀà¶ÔÏóËùÐèµÄÄÇÑùÓжîÍâµÄÒýÓòúÉú¡£ÀýÈ磬µ±ÉùÃ÷º¬ÓгÉǧÉÏÍò¸ö¶ÔÏóµÄÊý×éʱ£¬Õâ»áÒýÆð¼«´óµÄ²îÒì¡£

Çåµ¥4.1 °üº¬Ò»¸öÃüÃûΪIPµÄ¼òµ¥½á¹¹£¬Ëü±íʾһ¸öʹÓÃbyteÀàÐ͵Ä4¸ö×ֶεÄIPµØÖ·¡£ÕâÀï²»°üº¬·½·¨µÈ£¬ÒòΪÕâЩ¹¤×÷ÕýÈçʹÓÃÀàÒ»Ñù£¬½«ÔÚÏÂÒ»ÕÂÓÐÏêϸµÄÃèÊö¡£

Çåµ¥4.1 ¶¨ÒåÒ»¸ö¼òµ¥µÄ½á¹¹

1: using System;

2:

3: struct IP

4: {

5: public byte b1,b2,b3,b4;

6: }

7:

8: class Test

9: {

10: public static void Main()

11: {

12: IP myIP;

13: myIP.b1 = 192;

14: myIP.b2 = 168;

15: myIP.b3 = 1;

16: myIP.b4 = 101;

17: Console.Write("{0}.{1}.",myIP.b1,myIP.b2);

18: Console.Write("{0}.{1}",myIP.b3,myIP.b4);

19: }

20: }

4.1.3 ö¾ÙÀàÐÍ

µ±ÄãÏëÉùÃ÷Ò»¸öÓÉÒ»¸öÖ¸¶¨³£Á¿¼¯ºÏ×é³ÉµÄ¶ÀÌØÀàÐÍʱ£¬Ã¶¾ÙÀàÐÍÕýÊÇÄãҪѰÃٵġ£×î¼òµ¥µÄÐÎʽ£¬Ëü¿´ÆðÀ´¿ÉÄÜÏóÕâÑù£º

enum MonthNames { January, February, March, April };

ÒòÎÒ¹ßÓÃȱʡÉèÖ㬹Êö¾ÙÔªËØÊÇintÐÍ£¬ÇÒµÚÒ»¸öÔªËØÎª0Öµ¡£Ã¿Ò»¸öÁ¬ÐøµÄÔªËØ°´1µÝÔö¡£Èç¹ûÄãÏë¸øµÚÒ»¸öÔªËØÖ±½Ó¸³Öµ£¬¿ÉÒÔÈçϰÑËüÉè³É1£º

enum MonthNames { January=1, February, March, April };

Èç¹ûÄãÏ븳ÈÎÒâÖµ¸øÃ¿¸öÔªËØ¡ª¡ªÉõÖÁÏàͬµÄÖµ¡ª¡ªÕâͬÑùûÓÐÎÊÌ⣺

enum MonthNames { January=31, February=28, March=31, April=30 };

×îºóµÄÑ¡ÔñÊDz»Í¬ÓÚintµÄÊý¾ÝÀàÐÍ¡£¿ÉÒÔÔÚÒ»ÌõÓï¾äÖа´Èç´Ë¸³Öµ£º

enum MonthNames : byte { January=31, February=28, March=31, April=30 };

Äã¿ÉÒÔʹÓõÄÀàÐͽöÏÞÓÚlong¡¢int¡¢shortºÍbyte¡£

4.2 ÒýÓÃÀàÐÍ

ºÍÖµÀàÐÍÏà±È£¬ÒýÓÃÀàÐͲ»´æ´¢ËüÃÇËù´ú±íµÄʵ¼ÊÊý¾Ý£¬µ«ËüÃǴ洢ʵ¼ÊÊý¾ÝµÄÒýÓá£ÔÚC#ÖÐÌṩÒÔÏÂÒýÓÃÀàÐ͸øÄãʹÓãº

¡¤¶ÔÏóÀàÐÍ

¡¤ÀàÀàÐÍ

¡¤½Ó¿Ú

¡¤´ú±íÔª

¡¤×Ö·û´®ÀàÐÍ

¡¤Êý×é

4.2.1 ¶ÔÏóÀàÐÍ

¶ÔÏóÀàÐÍÊÇËùÓÐÀàÐÍ֮ĸ¡ª¡ªËüÊÇÆäËüÀàÐÍ×î¸ù±¾µÄ»ùÀà¡£ÒòΪËüÊÇËùÓжÔÏóµÄ»ùÀ࣬ËùÒԿɰÑÈκÎÀàÐ͵ÄÖµ¸³¸øËü¡£ÀýÈ磬һ¸öÕûÐÍ£º

object theObj = 123;

¸øËùÓеÄC++³ÌÐòÔ±Ò»¸ö¾¯¸æ£ºobject²¢²»µÈ¼ÛÓÚÄã¿ÉÄÜÕýÔÚѰÕÒµÄvoid*¡£ÎÞÂÛÈçºÎ£¬ÍüµôÖ¸Õë×ÜÊǸöºÃÖ÷Òâ¡£

µ±Ò»¸öÖµÀàÐͱ»¼Ó¿ò£¨×÷Ϊһ¸ö¶ÔÏóÀûÓã©Ê±£¬¾ÍÓõ½¶ÔÏóÀàÐÍ¡£ÕâÒ»ÕÂÉÔºó»áÌÖÂÛµ½¼Ó¿òºÍÏû¿ò

4.2.2 ÀàÀàÐÍ

Ò»¸öÀàÀàÐÍ¿ÉÒÔ°üº¬Êý¾Ý³ÉÔ±¡¢º¯Êý³ÉÔ±ºÍǶÌ×ÀàÐÍ¡£Êý¾Ý³ÉÔ±Êdz£Á¿¡¢¾²Ì¬×ֶκÍʼþ¡£º¯Êý³ÉÔ±°üÀ¨·½·¨¡¢ÊôÐÔ¡¢Ë÷Òý¡¢²Ù×÷·û¡¢¹¹Ô캯ÊýºÍÎö¹¹º¯Êý¡£ÀàºÍ½á¹¹µÄ¹¦ÄÜÊǷdz£ÏàËÆµÄ£¬µ«ÕýÈçÇ°ÃæËùÊö£¬½á¹¹ÊÇÖµÀàÐͶøÀàÊÇÒýÓÃÀàÐÍ¡£ ºÍC++Ïà±È£¬½öÔÊÐíµ¥¼Ì³Ð¡££¨Äã²»ÄÜÓµÓÐÅÉÉúÒ»¸öжÔÏóµÄ¶à»ùÀà¡££© µ«ÊÇ£¬C#ÖеÄÒ»¸öÀà¿ÉÒÔÅÉÉú×Ô¶àÖØ½Ó¿Ú£¬¸Ã½Ó¿ÚÔÚÏÂÒ»½Ú½«µÃµ½ÃèÊö¡£

µÚÎåÕ ¡°ÀࡱרÃÅÌÖÂÛʹÓÃÀà±à³Ì¡£ÕâÒ»½Ú½ö´òËã¸ø³öC#ÀàÊʺÏÀàÐÍͼµÄ¸Å¿ö¡£

4.2.3 ½Ó¿Ú

Ò»¸ö½Ó¿ÚÉùÃ÷Ò»¸öÖ»ÓгéÏó³ÉÔ±µÄÒýÓÃÀàÐÍ¡£¸úC++ÖÐÏàËÆµÄ¸ÅÄÊÇÒ»¸ö½á¹¹µÄ³ÉÔ±£¬ÇÒ·½·¨µÈÓÚ0¡£Èç¹ûÄãÒ»µã¶¼²»Á˽âÕâЩ¸ÅÄÕâÀï¾ÍÊÇÔÚC#ÖÐÒ»¸ö½Ó¿Úʵ¼ÊËù×öµÄ¡£ËüÖ»Óз½·¨Ãû£¬µ«¸ù±¾¾ÍûÓÐÖ´ÐдúÂë¡£Õâ¾Í°µÊ¾Á˲»ÄÜʵÀý»¯Ò»¸ö½Ó¿Ú£¬Ö»ÄÜʵÀý»¯Ò»¸öÅÉÉú×ԸýӿڵĶÔÏó¡£

¿ÉÒÔÔÚÒ»¸ö½Ó¿ÚÖж¨Òå·½·¨¡¢ÊôÐÔºÍË÷Òý¡£ËùÒÔ£¬¶Ô±ÈÒ»¸öÀ࣬½Ó¿ÚÓÐÊ²Ã´ÌØÊâÐÔÄØ£¿µ±¶¨ÒåÒ»¸öÀàʱ£¬¿ÉÒÔÅÉÉú×Ô¶à½Ó¿Ú£¬¶øÄã¿ÉÒÔ´Ó½öÓеÄÒ»¸öÀàÅÉÉú¡£

Äã¿ÉÄÜ»áÎÊ£º"OK£¬µ«ÎÒ±ØÐëʵÏÖËùÓеĽӿڳÉÔ±£¬ÄÇôÎÒÄÜ´ÓÕâ¸ö;¾¶µÃµ½Ê²Ã´ÄØ?" ÎÒÏë¾ÙÒ»¸öÀ´×Ô.NETµÄÀý×Ó£ººÜ¶àÀàʵÏÖÁËIDictionary ½Ó¿Ú¡£Äã¿ÉÒÔʹÓüòµ¥µÄÀàÐÍת»»·ÃÎʽӿڣº

IDictionary myDict = (IDictionary)someobjectthatsupportsit;

ÏÖÔÚÄãµÄ´úÂë¿ÉÒÔ·ÃÎÊ×ÖµäÁË¡£¿ÉµÈµÈ£¬ÎÒ˵ºÜ¶àÀà¿ÉÒÔʵÏÖÕâ¸ö½Ó¿Ú¡ª¡ªËùÒÔ£¬Äã¿ÉÒÔÔÚ¶à¸öµØ·½ÖØÓôúÂëÀ´·ÃÎÊIDictionary ½Ó¿Ú£¡Ò»µ©Ñ§»á£¬Èκεط½¶¼¿ÉʹÓá£

µ±Äã¾ö¶¨ÔÚÀàÉè¼ÆÖÐʹÓýӿÚʱ£¬Ñ§Ï°¸ü¶à¹ØÓÚÃæÏò¶ÔÏóµÄÉè¼ÆÊǸöºÃÖ÷Òâ¡£Õâ±¾Êé²»ÄܽÌÄãÕâЩ¸ÅÄµ«Äã¿ÉÒÔѧϰÈçºÎ´´½¨½Ó¿Ú¡£ÒÔϵĴúÂë¶Î¶¨Òå½Ó¿ÚIFace£¬ËüÖ»ÓÐÒ»¸ö·½·¨£º

interface IFace

{

void ShowMyFace();

}

ÕýÈçÎÒËùÌáµ½µÄ£¬²»ÄÜ´ÓÕâ¸ö¶¨ÒåʵÀý»¯Ò»¸ö¶ÔÏ󣬵«¿ÉÒÔ´ÓËüÅÉÉúÒ»¸öÀà¡£Òò´Ë£¬¸ÃÀà±ØÐëʵÏÖShowMyFace³éÏó·½·¨£º

class CFace:IFace

{

public void ShowMyFace()

{

Console.WriteLine("implementation");

}

}

½Ó¿Ú³ÉÔ±ºÍÀà³ÉÔ±µÄÇø±ðÔÚÓÚ£¬½Ó¿Ú³ÉÔ±²»Äܱ»ÊµÏÖ¡£Òò´Ë£¬ÎÒ²»ÏëÔÚÏÂÒ»ÕÂÖÐÔÙ´ÎÌáµ½ÕâÒ»µã¡£

4.2.4 ´ú±íÔª

´ú±íÔª·â×°Á˾ßÓÐijЩÃû×ֵķ½·¨¡£»ù±¾ÉÏ£¬´ú±íÔªÊÇÀàÐͰ²È«ºÍº¯ÊýÖ¸ÕëµÄ°²È«°æ±¾(»Øµ÷¹¦ÄÜ)¡£¿ÉÒÔͬʱÔÚÒ»¸ö´ú±íԪʵÀýÖÐͬʱ·â×°¾²Ì¬ºÍʵÀý·½·¨¡£

¾¡¹ÜÄã¿ÉÒÔÓôú±íÔ±µ±×÷¾ßÓз½·¨£¬µ«ËüÃǵÄÖ÷ÒªÓÃ;ÊÇÓµÓÐÒ»¸öÀàʼþ¡£ÔٴΣ¬ÎÒÏë°ÑÄãÒýµ½ÏÂÒ»Õ£¬ÄÇÀï»áÏêϸµØÌÖÂÛÀà¡£

4.2.5 ×Ö·û´®ÀàÐÍ

C³ÌÐòÔ±¿ÉÄÜ»á²ïÒ죬µ«µ±È»£¬C#ÓÐÒ»¸öÓÃÓÚ²Ù×÷×Ö·û´®Êý¾ÝµÄ»ù±¾×Ö·û´®ÀàÐÍ¡£×Ö·û´®ÀàÖ±½ÓÅÉÉú×Ô¶ÔÏó£¬ÇÒËüÊDZ»ÃÜ·âµÄ£¬ÕâÒâζ×ÅÔÙ²»ÄÜ´ÓËüÅÉÉúÀà¡£¾ÍÏóÆäËüÀàÐÍ£¬×Ö·û´®ÊÇÔ¤¶¨ÒåÀàSystem StringµÄÒ»¸ö±ðÃû¡£

ËüµÄÓ÷¨Ê®·Ö¼òµ¥£º

string myString = "some text";

ºÏ²¢×Ö·û´®Í¬Ñù¼òµ¥£º

string myString = "some text" + " and a bit more";

¶øÈç¹ûÄãÏë·ÃÎʵ¥¸ö×Ö·û£¬ËùÒª×öµÄ¾ÍÊÇ·ÃÎÊϱ꣺

char chFirst = myString[0];

µ±±È½ÏÁ½¸ö×Ö·û´®ÊÇ·ñÏàµÈʱ£¬¼òµ¥µØÊ¹ÓÃ"=="±È½Ï²Ù×÷·û¡£

if (myString == yourString) ...

ÎÒÖ»ÏëÌáһϣ¬¾¡¹Ü×Ö·û´®ÊÇÒ»¸öÒýÓÃÀàÐÍ£¬µ«±È½ÏʱÊDZȽÏÖµ£¬¶ø²»ÊDZȽÏÒýÓÃ(ÄÚ´æµØÖ·)¡£

Õâ±¾ÊéµÄÿһ¸öÀý×ÓÖУ¬¼¸ºõ¶¼Óõ½ÁË×Ö·û´®ÀàÐÍ£¬¶øÇÒÔÚÕâЩÀý³ÌÖУ¬ÎÒ»á½éÉܸøÄãһЩÓÉ×Ö·û´®¶ÔÏóËù½ÒʾµÄ¼«ÆäÓÐȤµÄ·½·¨¡£

4.2.6 Êý×é

Ò»¸öÊý×é°üº¬ÓÐͨ¹ý¼ÆËãϱê·ÃÎʵıäÁ¿¡£ËùÓаüº¬ÓÚÊý×éÖÐÇÒ±»µ±×÷ÔªËØµÄ±äÁ¿±ØÐëÊÇͬһÀàÐÍ¡£ÕâÖÖÀàÐÍ×ÔÈ»±»³ÆÎª"Êý×éÀàÐÍ"¡£Êý×é¿ÉÒÔ´æ´¢ÕûÊý¶ÔÏó¡¢×Ö·û´®¶ÔÏó»òÕßÄãÌá³öµÄÈκζÔÏó¡£

Êý×éµÄάÊý¾ÍÊÇËùνµÄÅÅ(rank)£¬Ëü¾ö¶¨ÁËÏà¹ØÊý×éÔªËØµÄϱêÊý¡£×î³£ÓõÄÊý×éÊÇһάÊý×é(µÚÒ»ÅÅ)¡£Ò»¸ö¶àάÊý×é¾ßÓеÄÅÅÊý´óÓÚ1 ¡£Ã¿¸öάµÄϱêʼÓÚ0£¬ÖÕÓÚάµÄ³¤¶È¼õ1 ¡£

Ó¦ÓÐ×ã¹»µÄÀíÂÛÖ§³Ö¡£ÈÃÎÒÃÇ¿´Ò»ÏÂÓÃÒ»¸öÊý×é³õʼ»¯Æ÷( array initializer)³õʼ»¯µÄÊý×飺

string[] arrLanguages = { "C", "C++", "C#" };

¸Ã¼òдЧ¹ûµÈͬÒÔÏ£º

arrLanguages[0]="C"; arrLanguages[1]="C++"; arrLanguages[2]="C#";

¶ø±àÒëÆ÷ΪÄã×öÁËËùÓеŤ×÷¡£µ±È»£¬Ëü½«Í¬ÑùΪ¶àάÊý×é³õʼ»¯Æ÷¹¤×÷£º

int[,] arr = {{0,1}, {2,3}, {4,5}};

ËüÊÇÒÔϵļòд£º

arr[0,0] = 0; arr[0,1] = 1;

arr[1,0] = 2; arr[1,1] = 3;

arr[2,0] = 4; arr[2,1] = 5;

Èç¹ûÄã²»ÏëÊÂÏȳõʼ»¯Ò»¸öÊý×飬µ«ÖªµÀÁËËüµÄ´óС£¬¸ÃÉùÃ÷¾ÍÏóÕâÑù£º

int[,] myArr = new int[5,3];

Èç¹ûÊý×éµÄ´óС±ØÐ붯̬µØ±»¼ÆË㣬ÓÃÓÚÊý×é´´½¨µÄÓï¾ä¿ÉÒÔÏóÕâÑùд£º

int nVar = 5;

int[] arrToo = new int[nVar];

ÕýÈçÎÒÔÚÕâÒ»½Ú¿ªÊ¼Ëù³ÂÊöµÄ£¬Äã¿ÉÒÔÍùÊý×éÀïÃæÈûÈκζ«Î÷£¬Ö»ÒªËùÓеÄÔªËØÀàÐͶ¼Ïàͬ¡£Òò´Ë£¬Èç¹ûÄãÏë°ÑÈκζ«Î÷·Å½øÒ»¸öÊý×飬¾ÍÉùÃ÷ËüµÄÀàÐÍΪ¶ÔÏó£º

4.3 ¼Ó¿òºÍÏû¿ò

ÕâÒ»ÕµĿγÌÖУ¬ÎÒÒѾ­¸ø³öÁ˸÷ʽ¸÷ÑùµÄÖµÀàÐͺÍÒýÓÃÀàÐÍ¡£ÓÉÓÚËٶȵÄÔ­Òò£¬Äã»áʹÓÃÖµÀàÐÍ¡ª¡ªËüÃÇÖ»ÊÇÕ¼¾ÝÒ»¶¨µÄÄÚ´æ¿é¡£µ«ÊÇ£¬ÓÐʱ¶ÔÏóµÄ·½±ãÐÔ¾ÍÏóÖµÀàÐÍÒ»ÑùºÃÓá£

¼Ó¿òºÍÏû¿ò£¬C#ÀàÐÍϵͳµÄºËÐĸÅÄÕâʱÉÁÁÁµÇ³¡ÁË¡£Í¨¹ýÔÊÐíÒ»¸öÖµÀàÐÍת»»³ÉÀàÐͶÔÏó»ò´ÓÀàÐͶÔÏóת»»³ÉÖµÀàÐÍ£¬ÕâÖÖ»úÖÆÐγÉÁËÖµÀàÐͺÍÒýÓÃÀàÐÍÖ®¼äµÄÀ¦°óÁ¬½Ó¡£Èκζ«Î÷ÖÕ¾¿ÊÇÒ»¸ö¶ÔÏ󡪡ªµ«ÊÇ£¬ÕâÖ»ÊÇÔÚÐèÒªËüÃÇ×÷Ϊ¶ÔÏóʱ¡£

4.3.1 ¼Ó¿òת»»

¸øÒ»¸öÖµ¼Ó¿òÖ¸ÒþʽµØ°ÑÈκÎÖµÀàÐÍת»»³ÉÀàÐͶÔÏó¡£µ±Ò»¸öÖµÀàÐͱ»¼Ó¿òʱ£¬Ò»¸ö¶ÔÏóʵÀý¾Í±»·ÖÅ䣬ÇÒÖµÀàÐ͵ÄÖµ±»¿½±´¸øÐµĶÔÏó¡£

¿´ÒÔÏÂÀý×Ó£º

int nFunny = 2000;

object oFunny = nFunny;

µÚ¶þÐеĸ³Öµ°µÊ¾µ÷ÓÃÒ»¸ö¼Ó¿ò²Ù×÷¡£nFunnyÕûÐͱäÁ¿µÄÖµ±»¿½±´¸øoFunny¶ÔÏó¡£ÏÖÔÚÕûÐͱäÁ¿ºÍ¶ÔÏó±äÁ¿¶¼Í¬Ê±´æÔÚÓÚÕ»ÖУ¬µ«¶ÔÏóµÄÖµ¾ÓÁôÔÚ¶ÑÖС£

ÄÇô£¬Ëü°µÊ¾×ÅÊ²Ã´ÄØ? ËüÃǵÄÖµ»¥Ïà¶ÀÁ¢¡ª¡ªÔÚËüÃÇÖ®¼äûÓÐÁ¬½Ó¡£(oFunnyûÓÐÒýÓÃnFunnyµÄÖµ¡£) ÒÔÏ´úÂë˵Ã÷Á˽á¹û£º

int nFunny = 2000;

object oFunny = nFunny;

oFunny = 2001;

Console.WriteLine("{0} {1}", nFunny, oFunny);

µ±´úÂë¸Ä±äoFunnyµÄֵʱ£¬nFunnyµÄÖµ²¢Ã»Óиı䡣ֻҪÄãÄÔ´üÖÐÓÐÕâ¸öcopy¶¯×÷£¬¾ÍÄܹ»Ê¹ÓÃÖµÀàÐ͵ĶÔÏó¹¦ÄÜ£¬·¢»Ó³öÄãµÄ¾Þ´óÓÅÊÆ£¡

4.3.2 Ïû¿òת»»

ºÍ¼Ó¿òÏà±È£¬Ïû¿òÊÇÏÔʽ²Ù×÷¡ª¡ª±ØÐë¸æËß±àÒëÆ÷£¬ÄãÏë´Ó¶ÔÏóÖгéÈ¡³öÄÄÒ»ÖÖÖµÀàÐÍ¡£µ±Ö´ÐÐÏû¿ò²Ù×÷ʱ£¬C#¼ì²âËùÇëÇóµÄÖµÀàÐÍʵ¼ÊÉÏ´æ´¢ÔÚ¶ÔÏóʵÀýÖС£¾­¹ý³É¹¦µÄÈ·ÈÏ£¬¸ÃÖµ±»Ïû¿ò¡£

Õâ¾ÍÊÇÏû¿òÈçºÎÖ´ÐУº

int nFunny = 2000;

object oFunny = nFunny;

int nNotSoFunny = (int)oFunny;

Èç¹û´íÎóµØÇëÇóÒ»¸ödoubleÖµ

double nNotSoFunny = (double)oFunny;

ͨÓÃÓïÑÔÔËÐÐʱ(Common Language Runtime£¬¼òдCLR)½«»áÒý·¢Ò»¸öInvalidCastExceptionÒì³£¡£Äã¿ÉÒÔÔÚµÚ7Õ "Òì³£´¦Àí" ÖÐѧµ½¸ü¶àÓйØÒì³£´¦ÀíµÄ֪ʶ¡£

4.4 С½á

ÔÚÕâÒ»ÕÂÖУ¬Äãѧµ½ÁËC#ÖÐÓõ½µÄ¸÷ÖÖÀàÐÍ¡£¼òµ¥µÄÖµÀàÐͰüÀ¨ÕûÐÍ¡¢²¼¶ûÐÍ¡¢¸¡µãÐͺÍСÊýÐÍ¡£Äã»áÊ®·Ö¾­³£µØÓõ½Ò»Ð©ÀàÐÍ£¬½øÐÐÊýѧºÍ½ðÈڵļÆË㣬ÒÔ¼°Âß¼­±í´ï¡£

ÔÚ½éÉÜÒýÓÃÀàÐÍ֮ǰ£¬ÎÒÏÔʾÁËÒ»¸ö¿´ÆðÀ´ÏóÀàµÄ½á¹¹ÀàÐÍ¡£Ëü¼¸ºõ¾ÍÏóÒ»¸öÀàÄÇÑùÔË×÷£¬µ«ËüÖ»ÊÇÒ»¸öÖµÀàÐÍ£¬ÕâʹËü¸ü¼ÓÊʺÏÐèÒªÓдóÁ¿µÄС¶ÔÏóµÄ³¡ºÏ¡£

ÒýÓÃÀàÐÍÆðʼÓÚËùÓжÔÏó֮ĸµÄobjedt±¾Éí¡£objectÊÇC#ÖÐËùÓжÔÏóµÄ»ùÀ࣬ÇÒËüͬÑùÓÃÓÚÖµÀàÐ͵ļӿòºÍÏû¿ò¡£³ý´ËÖ®Í⣬ÎÒ»¹ÈÃÄãÁìÂÔÁË´ú±íÔª¡¢×Ö·û´®ºÍÊý×é¡£

ÁîC#³ÌÐòԱʮ·ÖÉñÆøµÄÀàÐ;ÍÊÇÀà¡£ËüÊÇC#ÃæÏò¶ÔÏó±à³ÌµÄÐÄÔ࣬ÏÂÒ»ÕÂÕûÕÂרÃÅÈÃÄãѸËÙÀí½âÕâ¸ö¼¤¶¯ÈËÐÄÇÒ¹¦ÄÜÇ¿´óµÄÀàÐÍ¡£


µÚÎåÕ Àà¡¡¡¡¡¡¡¡»Ø¶¥²¿

ǰһÕÂÌÖÂÛÁËÊý¾ÝÀàÐͺÍËüÃǵÄÓ÷¨¡£ÏÖÔÚÎÒÃÇ×ªÒÆµ½C#ÖÐÖÁ¹ØÖØÒªµÄ½á¹¹¡ª¡ªÀࡣûÓÐÁËÀ࣬¾ÍÁ¬¼òµ¥µÄC#³ÌÐò¶¼²»ÄܱàÒë¡£ÕâÒ»Õ¼ٶ¨ÄãÖªµÀÁËÒ»¸öÀàµÄ»ù±¾×é³É²¿·Ö£º·½·¨¡¢ÊôÐÔ¡¢¹¹Ô캯ÊýºÍÎö¹¹º¯Êý¡£ C#ÔÚÆäÖÐÔö¼ÓÁËË÷ÒýºÍʼþ¡£
ÔÚÕâÒ»ÕÂÖУ¬Äãѧµ½ÏÂÁÐÓйØÀàµÄ»°Ìâ¡£
¡£ ʹÓù¹Ô캯ÊýºÍÎö¹¹º¯Êý
¡£¸øÀàд·½·¨
¡£¸øÒ»¸öÀàÔö¼ÓÊôÐÔ´æÈ¡±êÖ¾
¡£ÊµÏÖË÷Òý
¡£´´½¨Ê¼þ²¢Í¨¹ý´ú±íԪΪʼþ¹ØÁª¿Í»§
¡£Ó¦ÓÃÀà¡¢³ÉÔ±ºÍ´æÈ¡ÐÞÊηû¡£

5.1 ¹¹Ô캯ÊýºÍÎö¹¹º¯Êý
ÔÚÄã¿ÉÒÔ·ÃÎÊÒ»¸öÀàµÄ·½·¨¡¢ÊôÐÔ»òÈÎºÎÆäËü¶«Î÷֮ǰ£¬ µÚÒ»ÌõÖ´ÐеÄÓï¾äÊǰüº¬ÓÐÏàÓ¦ÀàµÄ¹¹Ô캯Êý¡£ÉõÖÁÄã×Ô¼º²»Ð´Ò»¸ö¹¹Ô캯Êý£¬Ò²»áÓÐÒ»¸öȱʡµÄ¹¹Ô캯ÊýÌṩ¸øÄã¡£

class TestClass
{
public TestClass(): base() {} // ÓɱàÒëÆ÷Ìṩ
}

Ò»¸ö¹¹Ô캯Êý×ÜÊǺÍËüµÄÀàÃûÏàͬ£¬µ«ÊÇ£¬ËüûÓÐÉùÃ÷·µ»ØÀàÐÍ¡£×ÜÖ®£¬¹¹Ô캯Êý×ÜÊÇpublicµÄ£¬Äã¿ÉÒÔÓÃËüÃÇÀ´³õʼ»¯±äÁ¿¡£

public TestClass()
{
// ÔÚÕâ¸ø±äÁ¿
// ³õʼ»¯´úÂëµÈµÈ¡£
}

Èç¹ûÀà½ö°üº¬¾²Ì¬³ÉÔ±(ÄÜÒÔÀàÐ͵÷Ó㬶ø²»ÊÇÒÔʵÀýµ÷ÓõijÉÔ±)£¬Äã¿ÉÒÔ´´½¨Ò»¸öprivateµÄ¹¹Ô캯Êý¡£
private TestClass() {}
¾¡¹Ü´æÈ¡ÐÞÊηûÔÚÕâÒ»ÕµĺóÃæ½«Òª´óƪ·ùµØÌÖÂÛ£¬µ«ÊÇprivateÒâζ×Å´ÓÀàµÄÍâÃæ²»¿ÉÄÜ·ÃÎʸù¹Ô캯Êý¡£ËùÒÔ£¬Ëü²»Äܱ»µ÷Óã¬ÇÒûÓжÔÏó¿ÉÒÔ×Ô¸ÃÀඨÒ屻ʵÀý»¯¡£
²¢²»½öÏÞÓÚÎÞ²ÎÊý¹¹Ô캯Êý¡ª¡ªÄã¿ÉÒÔ´«µÝ³õʼ²ÎÊýÀ´³õʼ»¯³ÉÔ±¡£
public TestClass(string strName, int nAge) { ... }

×÷Ϊһ¸öC/C++³ÌÐòÔ±£¬Äã¿ÉÄÜϰ¹ßÓÚ¸ø³õʼ»¯Ð´Ò»¸ö¸½¼ÓµÄ·½·¨£¬ÒòΪÔÚ¹¹Ô캯ÊýÖÐûÓзµ»ØÖµ¡£µ±È»£¬¾¡¹ÜÔÚC#ÖÐҲûÓзµ»ØÖµ£¬µ«Äã¿ÉÒÔÒý·¢Ò»¸ö×ÔÖÆµÄÒì³££¬ÒÔ´Ó¹¹Ô캯Êý»ñµÃ·µ»ØÖµ¡£¸ü¶àÓйØÒì³£´¦ÀíµÄ֪ʶÔÚµÚÆßÕ "Òì³£´¦?quot;ÖÐÓÐÌÖÂÛ¡£
µ«ÊÇ£¬µ±Äã±£ÁôÒýÓøø±¦¹óµÄ×ÊÔ´£¬Ó¦¸ÃÏ뵽дһ¸ö·½·¨À´½â¾ö£ºÒ»¸ö¿ÉÒÔ±»ÏÔʽµØµ÷ÓÃÀ´ÊÍ·ÅÕâЩ×ÊÔ´¡£ÎÊÌâÊǵ±Äã¿ÉÒÔÔÚÎö¹¹º¯Êý(ÒÔÀàÃûµÄÇ°Ãæ¼Ó"~"µÄ·½Ê½ÃüÃû)ÖÐ×öͬÑùµÄÊÂÇéʱ£¬ÎªºÎ»¹ÒªÐ´Ò»¸ö¸½¼ÓµÄ·½·¨.
public ~TestClass()
{
// Çå³ý
}

ÄãÓ¦¸Ãдһ¸ö¸½¼Ó·½·¨µÄÔ­ÒòÊÇÀ¬»øÊÕ¼¯Æ÷£¬ËüÔÚ±äÁ¿³¬³ö·¶Î§ºó²¢²»»áÁ¢¼´±»µ÷Ó㬶ø½öµ±¼äЪÆÚ¼ä»òÄÚ´æÌõ¼þÂú×ãʱ²Å±»´¥·¢¡£µ±ÄãËø×¡×ÊÔ´µÄʱ¼ä³¤ÓÚÄãËù¼Æ»®µÄʱ¼äʱ£¬Ëü¾Í»á·¢Éú¡£Òò´Ë£¬Ìṩһ¸öÏÔʽµÄÊÍ·Å·½Ê½ÊÇÒ»¸öºÃÖ÷Ò⣬ËüͬÑùÄÜ´ÓÎö¹¹º¯ÊýÖе÷Óá£

public void Release()
{
// ÊÍ·ÅËùÓб¦¹óµÄ×ÊÔ´
}

public ~TestClass()
{
Release();
}

µ÷ÓÃÎö¹¹º¯ÊýÖеÄÊÍ·Å·½·¨²¢²»ÊDZØÒªµÄ¡ª¡ª×ÜÖ®£¬À¬»øÊÕ¼¯»áÁôÒâÊͷŶÔÏó¡£µ«Ã»ÓÐÍü¼ÇÇå³ýÊÇÒ»ÖÖÁ¼ºÃµÄϰ¹ß¡£

5.2 ·½·¨
¼ÈÈ»¶ÔÏóÄÜÕýÈ·µØ³õʼ»¯ºÍ½áÊø£¬ËùÊ£ÏÂÀ´µÄ¾ÍÊÇÍùÀàÖÐÔö¼Ó¹¦ÄÜ¡£ÔÚ´ó¶àÊýÇé¿öÏ£¬¹¦ÄܵÄÖ÷Òª²¿·ÖÔÚ·½·¨ÖÐÄܵõ½ÊµÏÖ¡£ÄãÔçÒѼû¹ý¾²Ì¬·½·¨µÄʹÓ㬵«ÊÇ£¬ÕâЩÊÇÀàÐÍ(Àà)µÄ²¿·Ö£¬²»ÊÇʵÀý(¶ÔÏó)¡£
ΪÁËÈÃÄãѸËÙÈëÃÅ£¬ÎÒ°ÑÕâЩ·½·¨µÄ·³ËöÎÊÌâ°²ÅÅΪÈý½Ú£º
¡£·½·¨²ÎÊý
¡£¸Äд·½·¨
¡£·½·¨ÆÁ±Î
5.2.1 ·½·¨²ÎÊýb
Òò·½·¨Òª´¦Àí¸ü¸ÄÊýÖµ£¬Äã¶à¶àÉÙÉÙÒª´«µÝÖµ¸ø·½·¨£¬²¢´Ó·½·¨»ñµÃ·µ»ØÖµ¡£ÒÔÏÂÈý¸ö²¿·ÖÉæ¼°µ½ÓÉ´«µÝÖµºÍΪµ÷ÓÃÕß»ñÈ¡·µ»Ø½á¹ûËùÒýÆðµÄÎÊÌâ¡£ ¡£ÊäÈë²ÎÊý
¡£ÒýÓòÎÊý
¡£Êä³ö²ÎÊý

5.2.1.1 ÊäÈë²ÎÊý
ÄãÔçÒÑÔÚÀý×ÓÖмû¹ýµÄÒ»¸ö²ÎÊý¾ÍÊÇÊäÈë²ÎÊý¡£ÄãÓÃÒ»¸öÊäÈë²ÎÊýͨ¹ýÖµ´«µÝÒ»¸ö±äÁ¿¸øÒ»¸ö·½·¨¡ª¡ª·½·¨µÄ±äÁ¿±»µ÷ÓÃÕß´«µÝ½øÀ´µÄÖµµÄÒ»¸ö¿½±´³õʼ»¯¡£Çåµ¥5.1 ʾ·¶ÊäÈë²ÎÊýµÄʹÓá£

Çåµ¥ 5.1 ͨ¹ýÖµ´«µÝ²ÎÊý

1: using System;
2:
3: public class SquareSample
4: {
5: public int CalcSquare(int nSideLength)
6: {
7: return nSideLength*nSideLength;
8: }
9: }
10:
11: class SquareApp
12: {
13: public static void Main()
14: {
15: SquareSample sq = new SquareSample();
16: Console.WriteLine(sq.CalcSquare(25).ToString());
17: }
18: }

ÒòΪÎÒ´«µÝÖµ¶ø²»ÊÇÒýÓøøÒ»¸ö±äÁ¿£¬ËùÒÔµ±µ÷Ó÷½·¨Ê±(¼ûµÚ16ÐÐ)£¬¿ÉÒÔʹÓÃÒ»¸ö³£Á¿±í´ïʽ(25)¡£ÕûÐͽá¹û±»´«»Ø¸øµ÷ÓÃÕß×÷Ϊ·µ»ØÖµ£¬ËüûÓд浽Öмä±äÁ¿¾Í±»Á¢¼´ÏÔʾµ½ÆÁÄ»ÉÏ ¡£
ÊäÈë²ÎÊý°´C/C++³ÌÐòÔ±ÔçÒÑϰ¹ßµÄ¹¤×÷·½Ê½¹¤×÷¡£Èç¹ûÄãÀ´×ÔVB£¬Çë×¢ÒâûÓÐÄܱ»±àÒëÆ÷´¦ÀíµÄÒþʽByVal»òByRef¡ª¡ªÈç¹ûûÓÐÉ趨£¬²ÎÊý×ÜÊÇÓÃÖµ´«µÝ¡£
ÕâµãËÆºõÓëÎÒÇ°ÃæËù³ÂÊöµÄÓгåÍ»£º¶ÔÓÚһЩ±äÁ¿ÀàÐÍ£¬ÓÃÖµ´«µÝʵ¼ÊÉÏÒâζ×ÅÓÃÒýÓô«µÝ¡£ÃÔ»óÂð? Ò»µã±³¾°ÖªÊ¶Ò²²»ÐèÒª£ºCOMÖеĶ«Î÷¾ÍÊǽӿڣ¬Ã¿Ò»¸öÀà¿ÉÒÔÓµÓÐÒ»¸ö»ò¶à¸ö½Ó¿Ú¡£Ò»¸ö½Ó¿ÚÖ»²»¹ýÊÇÒ»×麯ÊýÖ¸Õ룬Ëü²»°üº¬Êý¾Ý¡£Öظ´¸ÃÊý×é»áÀ˷ѺܶàÄÚ´æ×ÊÔ´£»ËùÒÔ£¬½ö¿ªÊ¼µØÖ·±»¿½±´¸ø·½·¨£¬Ëü×÷Ϊµ÷ÓÃÕߣ¬ÈÔȻָÏò½Ó¿ÚµÄÏàָͬÕë¡£ÄǾÍÊÇΪʲô¶ÔÏóÓÃÖµ´«µÝÒ»¸öÒýÓá£

5.2.1.2 ÒýÓòÎÊý
¾¡¹Ü¿ÉÒÔÀûÓÃÊäÈë²ÎÊýºÍ·µ»ØÖµ½¨Á¢ºÜ¶à·½·¨£¬µ«ÄãÒ»Ïëµ½Òª´«µÝÖµ²¢Ô­µØÐÞ¸ÄËü(Ò²¾ÍÊÇÔÚÏàͬµÄÄÚ´æÎ»ÖÃ)£¬¾ÍûÓÐÄÇôºÃÔËÁË¡£ÕâÀïÓÃÒýÓòÎÊý¾ÍºÜ·½±ã¡£
void myMethod(ref int nInOut)
ÒòΪÄã´«µÝÁËÒ»¸ö±äÁ¿¸ø¸Ã·½·¨(²»½ö½öÊÇËüµÄÖµ)£¬±äÁ¿±ØÐë±»³õʼ»¯¡£·ñÔò£¬±àÒëÆ÷»á±¨¾¯¡£Çåµ¥ 5.2 ÏÔʾÈçºÎÓÃÒ»¸öÒýÓòÎÊý½¨Á¢Ò»¸ö·½·¨¡£

Çåµ¥ 5.2 ͨ¹ýÒýÓô«µÝ²ÎÊý

1: // class SquareSample
2: using System;
3:
4: public class SquareSample
5: {
6: public void CalcSquare(ref int nOne4All)
7: {
8: nOne4All *= nOne4All;
9: }
10: }
11:
12: class SquareApp
13: {
14: public static void Main()
15: {
16: SquareSample sq = new SquareSample();
17:
18: int nSquaredRef = 20; // Ò»¶¨Òª³õʼ»¯
19: sq.CalcSquare(ref nSquaredRef);
20: Console.WriteLine(nSquaredRef.ToString());
21: }
22: }

ÕýÈçËù¿´µ½µÄ£¬ËùÓÐÄãÒª×öµÄ¾ÍÊǸø¶¨ÒåºÍµ÷Óö¼¼ÓÉÏrefÏÞ¶¨·û¡£ÒòΪ±äÁ¿Í¨¹ýÒýÓô«µÝ£¬Äã¿ÉÒÔÓÃËüÀ´¼ÆËã³ö½á¹û²¢´«»Ø¸Ã½á¹û¡£µ«ÊÇ£¬ÔÚÏÖʵµÄÓ¦ÓóÌÐòÖУ¬ÎÒÇ¿ÁÒ½¨ÒéÒªÓÃÁ½¸ö±äÁ¿£¬Ò»¸öÊäÈë²ÎÊýºÍÒ»¸öÒýÓòÎÊý¡£

5.2.1.3 Êä³ö²ÎÊý
´«µÝ²ÎÊýµÄµÚÈýÖÖÑ¡Ôñ¾ÍÊǰÑËüÉè×÷Ò»¸öÊä³ö²ÎÊý¡£ÕýÈç¸ÃÃû×ÖËù°µÊ¾£¬Ò»¸öÊä³ö²ÎÊý½öÓÃÓÚ´Ó·½·¨´«µÝ»ØÒ»¸ö½á¹û¡£ËüºÍÒýÓòÎÊýµÄÁíÒ»¸öÇø±ðÔÚÓÚ£ºµ÷ÓÃÕß²»±ØÏȳõʼ»¯±äÁ¿²Åµ÷Ó÷½·¨¡£ÕâÏÔʾÔÚÇåµ¥5.3ÖС£

Çåµ¥ 5.3 ¶¨ÒåÒ»¸öÊä³ö²ÎÊý

1: using System;
2:
3: public class SquareSample
4: {
5: public void CalcSquare(int nSideLength, out int nSquared)
6: {
7: nSquared = nSideLength * nSideLength;
8: }
9: }
10:
11: class SquareApp
12: {
13: public static void Main()
14: {
15: SquareSample sq = new SquareSample();
16:
17: int nSquared; // ²»±Ø³õʼ»¯
18: sq.CalcSquare(15, out nSquared);
19: Console.WriteLine(nSquared.ToString());
20: }
21: }


5.2.2 ¸Äд·½·¨

ÃæÏò¶ÔÏóÉè¼ÆµÄÖØÒªÔ­Ôò¾ÍÊǶà̬ÐÔ¡£²»ÒªÀí»á¸ßÉîµÄÀíÂÛ£¬¶à̬ÐÔÒâζ×Å£ºµ±»ùÀà³ÌÐòÔ±ÒÑÉè¼ÆºÃÓÃÓÚ¸ÄдµÄ·½·¨Ê±£¬ÔÚÅÉÉúÀàÖУ¬Äã¾Í¿ÉÒÔÖØ¶¨Òå(¸Äд)»ùÀàµÄ·½·¨¡£»ùÀà³ÌÐòÔ±¿ÉÒÔÓà virtual ¹Ø¼ü×ÖÉè¼Æ·½·¨£º
virtual void CanBOverridden()
µ±´Ó»ùÀàÅÉÉúʱ£¬ËùÓÐÄãÒª×öµÄ¾ÍÊÇÔÚз½·¨ÖмÓÈëoverride¹Ø¼ü×Ö£º
override void CanBOverridden()
µ±¸Äдһ¸ö»ùÀàµÄ·½·¨Ê±£¬Äã±ØÐëÃ÷°×£¬²»Äܸı䷽·¨µÄ·ÃÎÊÊôÐÔ¡ª¡ªÔÚÕâÕµĺóÃæ£¬Äã»áѧµ½¸ü¶à¹ØÓÚ·ÃÎÊÐÞÊηûµÄ֪ʶ¡£
³ýÁ˸Äд»ùÀà·½·¨µÄÊÂʵÍ⣬»¹ÓÐÁíÒ»¸öÉõÖÁ¸üÖØÒªµÄ¸ÄÐ´ÌØÐÔ¡£µ±°ÑÅÉÉúÀàÇ¿ÖÆ×ª»»³É»ùÀàÀàÐͲ¢½Ó×ŵ÷ÓÃÐéÄâ·½·¨Ê±£¬±»µ÷ÓõÄÊÇÅÉÉúÀàµÄ·½·¨¶ø²»ÊÇ»ùÀàµÄ·½·¨¡£
((BaseClass)DerivedClassInstance).CanBOverridden();
ΪÁËÑÝʾÐéÄâ·½·¨µÄ¸ÅÄÇåµ¥ 5.4 ÏÔʾÈçºÎ´´½¨Ò»¸öÈý½ÇÐλùÀ࣬ËüÓµÓÐÒ»¸ö¿ÉÒÔ±»¸ÄдµÄ³ÉÔ±·½·¨£¨ComputeArea£©¡£

Çåµ¥ 5.4 ¸Äдһ¸ö»ùÀàµÄ·½·¨

1: using System;
2:
3: class Triangle
4: {
5: public virtual double ComputeArea(int a, int b, int c)
6: {
7: // Heronian formula
8: double s = (a + b + c) / 2.0;
9: double dArea = Math.Sqrt(s*(s-a)*(s-b)*(s-c));
10: return dArea;
11: }
12: }
13:
14: class RightAngledTriangle:Triangle
15: {
16: public override double ComputeArea(int a, int b, int c)
17: {
18: double dArea = a*b/2.0;
19: return dArea;
20: }
21: }
22:
23: class TriangleTestApp
24: {
25: public static void Main()
26: {
27: Triangle tri = new Triangle();
28: Console.WriteLine(tri.ComputeArea(2, 5, 6));
29:
30: RightAngledTriangle rat = new RightAngledTriangle();
31: Console.WriteLine(rat.ComputeArea(3, 4, 5));
32: }
33: }

»ùÀàTriangle¶¨ÒåÁË·½·¨ComputeArea¡£Ëü²ÉÓÃÈý¸ö²ÎÊý£¬·µ»ØÒ»¸ödouble½á¹û£¬ÇÒ¾ßÓй«¹²·ÃÎÊÐÔ¡£´ÓTriangleÀàÅÉÉú³öµÄÊÇRightAngledTriangle£¬Ëü¸ÄдÁËComputeArea ·½·¨£¬²¢ÊµÏÖÁË×Ô¼ºµÄÃæ»ý¼ÆË㹫ʽ¡£Á½¸öÀà¶¼±»ÊµÀý»¯£¬ÇÒÔÚÃüÃûΪTriangleTestAppµÄÓ¦ÓÃÀàµÄMain() ·½·¨Öеõ½ÑéÖ¤¡£
ÎÒ©Á˽âÊ͵Ú14ÐУº
class RightAngledTriangle : Triangle
ÔÚÀàÓï¾äÖÐðºÅ£¨£º£©±íʾRightAngledTriangle´ÓÀà TriangleÅÉÉú¡£ÄǾÍÊÇÄãËù±ØÐëÒª×öµÄ£¬ÒÔÈÃC#ÖªµÀÄãÏë°Ñ Triangleµ±×÷RightAngledTriangleµÄ»ùÀà¡£
µ±×Ðϸ¹Û²ìÖ±½ÇÈý½ÇÐεÄComputeArea·½·¨Ê±£¬Äã»á·¢ÏÖµÚ3¸ö²ÎÊý²¢Ã»ÓÐÓÃÓÚ¼ÆËã¡£µ«ÊÇ£¬ÀûÓøòÎÊý¾Í¿ÉÒÔÑéÖ¤ÊÇ·ñÊÇ¡°Ö±½Ç¡±¡£ÈçÇåµ¥5.5Ëùʾ¡£

Çåµ¥ 5.5 µ÷ÓûùÀàʵÏÖ

1: class RightAngledTriangle:Triangle
2: {
3: public override double ComputeArea(int a, int b, int c)
4: {
5: const double dEpsilon = 0.0001;
6: double dArea = 0;
7: if (Math.Abs((a*a + b*b - c*c)) > dEpsilon)
8: {
9: dArea = base.ComputeArea(a,b,c);
10: }
11: else
12: {
13: dArea = a*b/2.0;
14: }
15:
16: return dArea;
17: }
18: }

¸Ã¼ì²â¼òµ¥µØÀûÓÃÁ˱ϴï¸çÀ­Ë¹¹«Ê½£¬¶ÔÓÚÖ±½ÇÈý½ÇÐΣ¬¼ì²â½á¹û±ØÐëΪ0¡£Èç¹û½á¹û²»Îª0£¬Àà¾Íµ÷ÓÃËü»ùÀàµÄ ComputeAreaÀ´ÊµÏÖ¡£
dArea = base.ComputeArea(a,b,c);
Àý×ÓµÄÒªµãΪ£ºÍ¨¹ýÏÔʽµØÀûÓûùÀàµÄ×ʸñ¼ì²é£¬Äã¾ÍÄÜÇá¶øÒ׾ٵص÷ÓûùÀàʵÏÖ¸Äд·½·¨¡£
µ±ÄãÐèҪʵÏÖÆäÔÚ»ùÀàÖеŦÄÜ£¬¶ø²»Ô¸ÒâÔÚ¸Äд·½·¨ÖÐÖØ¸´Ëüʱ£¬Õâ¾Í·Ç³£ÓаïÖú¡£

5.2.3 ·½·¨ÆÁ±Î
ÖØ¶¨Òå·½·¨µÄÒ»¸ö²»Í¬ÊֶξÍÊÇÒªÆÁ±Î»ùÀàµÄ·½·¨¡£µ±´Ó±ðÈËÌṩµÄÀàÅÉÉúÀàʱ£¬Õâ¸ö¹¦ÄÜÌØ±ðÓмÛÖµ¡£¿´Çåµ¥ 5.6£¬¼ÙÉèBaseClassÓÉÆäËûÈËËùд£¬¶øÄã´ÓËüÅÉÉú³ö DerivedClass ¡£

Çåµ¥ 5.6 Derived Class ʵÏÖÒ»¸öûÓаüº¬ÓÚ Base ClassÖеķ½·¨

1: using System;
2:
3: class BaseClass
4: {
5: }
6:
7: class DerivedClass:BaseClass
8: {
9: public void TestMethod()
10: {
11: Console.WriteLine("DerivedClass::TestMethod");
12: }
13: }
14:
15: class TestApp
16: {
17: public static void Main()
18: {
19: DerivedClass test = new DerivedClass();
20: test.TestMethod();
21: }
22: }

ÔÚÕâ¸öÀý×ÓÖУ¬ DerivedClass ͨ¹ýTestMethod()ʵÏÖÁËÒ»¸ö¶îÍâµÄ¹¦ÄÜ¡£µ«ÊÇ£¬Èç¹û»ùÀàµÄ¿ª·¢ÕßÈÏΪ°ÑTestMethod()·ÅÔÚ»ùÀàÖÐÊǸöºÃÖ÷Ò⣬²¢Ê¹ÓÃÏàͬµÄÃû×ÖʵÏÖËüʱ£¬»á³öÏÖʲôÎÊÌâÄØ£¿£¨¼ûÇåµ¥5.7£©

Çåµ¥ 5.7 Base Class ʵÏÖºÍ Derived ClassÏàͬµÄ·½·¨

1: class BaseClass
2: {
3: public void TestMethod()
4: {
5: Console.WriteLine("BaseClass::TestMethod");
6: }
7: }
8:
9: class DerivedClass:BaseClass
10: {
11: public void TestMethod()
12: {
13: Console.WriteLine("DerivedClass::TestMethod");
14: }
15: }

ÔÚÓÅÐãµÄ±à³ÌÓïÑÔÖУ¬ÄãÏÖÔÚ»áÓöµ½Ò»¸öÕæÕýµÄ´óÂé·³¡£µ«ÊÇ£¬C#»á¸øÄãÌá³ö¾¯¸æ£º
hiding2.cs(13,14): warning CS0114: 'DerivedClass.TestMethod()' hides inherited member 'BaseClass.TestMethod()'. To make the current method override that implementation, add the override keyword. Otherwise add the new keyword.
£¨hiding2.cs(13,14):¾¯¸æ CS0114:'DerivedClass.TestMethod()' ÆÁ±ÎÁËËù¼Ì³ÐµÄ³ÉÔ±'BaseClass.TestMethod()'¡£ÒªÏëʹµ±Ç°·½·¨¸ÄдԭÀ´µÄʵÏÖ£¬¼ÓÉÏ override¹Ø¼ü×Ö¡£·ñÔò¼ÓÉÏеĹؼü×Ö¡££©
¾ßÓÐÁËÐÞÊηûnew£¬Äã¾Í¿ÉÒÔ¸æËß±àÒëÆ÷£¬²»±ØÖØÐ´ÅÉÉúÀà»ò¸Ä±äʹÓõ½ÅÉÉúÀàµÄ´úÂ룬ÄãµÄ·½·¨¾ÍÄÜÆÁ±ÎмÓÈëµÄ»ùÀà·½·¨¡£Çåµ¥5.8 ÏÔʾÈçºÎÔÚÀý×ÓÖÐÔËÓÃnewÐÞÊηû¡£

Çåµ¥ 5.8 ÆÁ±Î»ùÀà·½·¨

1: class BaseClass
2: {
3: public void TestMethod()
4: {
5: Console.WriteLine("BaseClass::TestMethod");
6: }
7: }
8:
9: class DerivedClass:BaseClass
10: {
11: new public void TestMethod()
12: {
13: Console.WriteLine("DerivedClass::TestMethod");
14: }
15: }

ʹÓÃÁ˸½¼ÓµÄnewÐÞÊηû£¬±àÒëÆ÷¾ÍÖªµÀÄãÖØ¶¨ÒåÁË»ùÀàµÄ·½·¨£¬ËüÓ¦¸ÃÆÁ±Î»ùÀà·½·¨¡£µ«ÊÇ£¬Èç¹ûÄã°´ÒÔÏ·½Ê½±àд£º
DerivedClass test = new DerivedClass();
((BaseClass)test).TestMethod();
»ùÀà·½·¨µÄʵÏ־ͱ»µ÷ÓÃÁË¡£ÕâÖÖÐÐΪ²»Í¬ÓÚ¸Äд·½·¨£¬ºóÕß±£Ö¤´ó²¿·ÖÅÉÉú·½·¨»ñµÃµ÷Óá£

5.3 ÀàÊôÐÔ
ÓÐÁ½ÖÖ;¾¶½ÒʾÀàµÄÃüÃûÊôÐÔ¡ª¡ªÍ¨¹ýÓò³ÉÔ±»òÕßͨ¹ýÊôÐÔ¡£Ç°ÕßÊÇ×÷Ϊ¾ßÓй«¹²·ÃÎÊÐԵijÉÔ±±äÁ¿¶ø±»ÊµÏֵģ»ºóÕß²¢²»Ö±½Ó»ØÓ¦´æ´¢Î»Öã¬Ö»ÊÇͨ¹ý ´æÈ¡±êÖ¾(accessors)±»·ÃÎÊ¡£
µ±ÄãÏë¶Á³ö»òдÈëÊôÐÔµÄֵʱ£¬´æÈ¡±êÖ¾ÏÞ¶¨Á˱»ÊµÏÖµÄÓï¾ä¡£ÓÃÓÚ¶Á³öÊôÐÔµÄÖµµÄ´æÈ¡±êÖ¾¼ÇΪ¹Ø¼ü×Öget£¬¶øÒªÐÞ¸ÄÊôÐÔµÄÖµµÄ¶Áд·û±êÖ¾¼ÇΪset¡£
ÔÚÄã¶Ô¸ÃÀíÂÛÒ»Öª°ë½âÒÔǰ£¬Çë¿´Ò»ÏÂÇåµ¥5.9ÖеÄÀý×Ó£¬ÊôÐÔSquareFeet±»±êÉÏÁËgetºÍsetµÄ´æÈ¡±êÖ¾¡£
Çåµ¥ 5.9 ʵÏÖÊôÐÔ´æÈ¡±êÖ¾

1: using System;
2:
3: public class House
4: {
5: private int m_nSqFeet;
6:
7: public int SquareFeet
8: {
9: get { return m_nSqFeet; }
10: set { m_nSqFeet = value; }
11: }
12: }
13:
14: class TestApp
15: {
16: public static void Main()
17: {
18: House myHouse = new House();
19: myHouse.SquareFeet = 250;
20: Console.WriteLine(myHouse.SquareFeet);
21: }
22: }

HouseÀàÓÐÒ»¸öÃüÃûΪSquareFeetµÄÊôÐÔ£¬Ëü¿ÉÒÔ±»¶ÁºÍд¡£Êµ¼ÊµÄÖµ´æ´¢ÔÚÒ»¸ö¿ÉÒÔ´ÓÀàÄÚ²¿·ÃÎʵıäÁ¿ÖСª¡ªÈç¹ûÄãÏëµ±×÷Ò»¸öÓò³ÉÔ±ÖØÐ´Ëü£¬ÄãËùÒª×öµÄ¾ÍÊǺöÂÔ´æÈ¡±êÖ¾¶ø°Ñ±äÁ¿ÖØÐ¶¨ÒåΪ£º
public int SquareFeet;
¶ÔÓÚÒ»¸öÈç´Ë¼òµ¥µÄ±äÁ¿£¬ÕâÑù²»´í¡£µ«ÊÇ£¬Èç¹ûÄãÏëÒªÒþ²ØÀàÄÚ²¿´æ´¢½á¹¹µÄϸ½Úʱ£¬¾ÍÓ¦¸Ã²ÉÓôæÈ¡±êÖ¾¡£ÔÚÕâÖÖÇé¿öÏ£¬set ´æÈ¡±êÖ¾¸øÖµ²ÎÊýÖеÄÊôÐÔ´«µÝÐÂÖµ¡££¨¿ÉÒÔ¸ÄÃû£¬¼ûµÚ10ÐС££©
³ýÁËÄܹ»Òþ²ØÊµÏÖϸ½ÚÍ⣬Ä㻹¿É×ÔÓɵØÏÞ¶¨¸÷ÖÖ²Ù×÷£º
getºÍset£ºÔÊÐí¶ÔÊôÐÔ½øÐжÁд·ÃÎÊ¡£
get only£ºÖ»ÔÊÐí¶ÁÊôÐÔµÄÖµ¡£
set only£ºÖ»ÔÊÐíдÊôÐÔµÄÖµ¡£
³ý´ËÖ®Í⣬Äã¿ÉÒÔ»ñµÃʵÏÖÔÚset±êÖ¾ÖÐÓÐЧ´úÂëµÄ»ú»á¡£ÀýÈ磬ÓÉÓÚÖÖÖÖÔ­Òò£¨»ò¸ù±¾Ã»ÓÐÔ­Òò£©£¬Äã¾ÍÄܹ»¾Ü¾øÒ»¸öÐÂÖµ¡£×îºÃÊÇûÓÐÈ˸æËßÄãËüÊÇÒ»¸ö¶¯Ì¬ÊôÐÔ¡ª¡ªµ±ÄãµÚÒ»´ÎÇëÇóËüºó£¬Ëü»á±£´æÏÂÀ´£¬¹ÊÒª¾¡¿ÉÄܵØÍƳÙ×ÊÔ´·ÖÅä¡£

5.4 Ë÷Òý
ÄãÏë¹ýÏó·ÃÎÊÊý×éÄÇÑùʹÓÃË÷Òý·ÃÎÊÀàÂ𠣿ʹÓÃC#µÄË÷Òý¹¦ÄÜ£¬¶ÔËüµÄÆÚ´ý±ã¿ÉÁ˽ᡣ

Óï·¨»ù±¾ÉÏÏóÕâÑù£º
ÊôÐÔ ÐÞÊηû ÉùÃ÷ { ÉùÃ÷ÄÚÈÝ}

¾ßÌåµÄÀý×ÓΪ
public string this[int nIndex]
{
get { ... }
set { ... }
}

Ë÷Òý·µ»Ø»ò°´¸ø³öµÄindexÉèÖÃ×Ö·û´®¡£ËüûÓÐÊôÐÔ£¬µ«Ê¹ÓÃÁËpublicÐÞÊηû¡£ÉùÃ÷²¿·ÖÓÉÀàÐÍstringºÍthis ×é³ÉÓÃÓÚ±íʾÀàµÄË÷Òý¡£
getºÍsetµÄÖ´ÐйæÔòºÍÊôÐԵĹæÔòÏàͬ¡££¨Äã²»ÄÜÈ¡ÏûÆäÖÐÒ»¸ö¡££© Ö»´æÔÚÒ»¸ö²î±ð£¬ÄǾÍÊÇ£ºÄ㼸ºõ¿ÉÒÔÈÎÒⶨÒå´óÀ¨»¡ÖеIJÎÊý¡£ÏÞÖÆÎª£¬±ØÐëÖÁÉٹ涨һ¸ö²ÎÊý£¬ÔÊÐíref ºÍout ÐÞÊηû¡£
this¹Ø¼ü×ÖÈ·±£Ò»¸ö½âÊÍ¡£Ë÷ÒýûÓÐÓû§¶¨ÒåµÄÃû×Ö£¬this ±íʾĬÈϽӿڵÄË÷Òý¡£Èç¹ûÀàʵÏÖÁ˶à¸ö½Ó¿Ú£¬Äã¿ÉÒÔÔö¼Ó¸ü¶à¸öÓÉInterfaceName.this˵Ã÷µÄË÷Òý¡£

ΪÁËÑÝʾһ¸öË÷ÒýµÄʹÓã¬ÎÒ´´½¨ÁËÒ»¸öСÐ͵ÄÀ࣬ËüÄܹ»½âÎöÒ»¸öÖ÷»úÃûΪIPµØÖ·¡ª¡ª»òÒ»¸öIPµØÖ·Áбí(ÒÔhttp://www.microsoft.comΪÀý )¡£Õâ¸öÁбíͨ¹ýË÷Òý¿ÉÒÔ·ÃÎÊ£¬Äã¿ÉÒÔ¿´Ò»ÏÂÇåµ¥5.10 µÄ¾ßÌåʵÏÖ¡£

Çåµ¥ 5.10 ͨ¹ýÒ»¸öË÷Òý»ñȡһ¸öIPµØÖ·

1: using System;
2: using System.Net;
3:
4: class ResolveDNS
5: {
6: IPAddress[] m_arrIPs;
7:
8: public void Resolve(string strHost)
9: {
10: IPHostEntry iphe = DNS.GetHostByName(strHost);
11: m_arrIPs = iphe.AddressList;
12: }
13:
14: public IPAddress this[int nIndex]
15: {
16: get
17: {
18: return m_arrIPs[nIndex];
19: }
20: }
21:
22: public int Count
23: {
24: get { return m_arrIPs.Length; }
25: }
26: }
27:
28: class DNSResolverApp
29: {
30: public static void Main()
31: {
32: ResolveDNS myDNSResolver = new ResolveDNS();
33: myDNSResolver.Resolve("http://www.microsoft.com");
34:
35: int nCount = myDNSResolver.Count;
36: Console.WriteLine("Found {0} IP's for hostname", nCount);
37: for (int i=0; i < nCount; i++)
38: Console.WriteLine(myDNSResolver[i]);
39: }
40: }

ΪÁ˽âÎöÖ÷»úÃû£¬ÎÒÓõ½ÁËDNSÀ࣬ËüÊÇSystem .Net Ãû×Ö¿Õ¼äµÄÒ»²¿·Ö¡£µ«ÊÇ£¬ÓÉÓÚÕâ¸öÃû×ֿռ䲢²»°üº¬ÔÚºËÐÄ¿âÖУ¬ËùÒÔ±ØÐëÔÚ±àÒëÃüÁîÐÐÖÐÒýÓøÿ⣺
csc /r:System.Net.dll /out:resolver.exe dnsresolve.cs
½âÎö´úÂëÊÇÏòǰ½âÎöµÄ¡£Ôڸà Resolve·½·¨ÖУ¬´úÂëµ÷ÓÃDNSÀàµÄ¾²Ì¬·½·¨GetHostByName£¬Ëü·µ»ØÒ»¸öIPHostEntry¶ÔÏó¡£½á¹û£¬¸Ã¶ÔÏó°üº¬ÓÐÎÒÒªÕÒµÄÊý×顪¡ªAddressListÊý×é¡£ÔÚÍ˳öResolve ·½·¨Ö®Ç°£¬ÔÚ¾Ö²¿µÄ¶ÔÏóʵÀý³ÉÔ±m_arrIPsÖУ¬´æ´¢ÁËÒ»¸öAddressList arrayµÄ¿½±´(ÀàÐÍIPAddress µÄ¶ÔÏó´æ´¢ÔÚÆäÖÐ)¡£
¾ßÓÐÏÖÔÚÉú³ÉµÄÊý×é £¬Í¨¹ýʹÓÃÔÚÀàResolveDNSÖÐÇóµÃµÄË÷Òý£¬Ó¦ÓóÌÐò´úÂë¾Í¿ÉÒÔÔÚµÚ37ÖÁ38ÐÐÁоٳöIPµØÖ·¡£(ÔÚµÚ6Õ "¿ØÖÆÓï¾ä"£¬Óиü¶àÓйØÓï¾äµÄÐÅÏ¢¡£) ÒòΪûÓа취¸ü¸ÄIPµØÖ·£¬ËùÒÔ½ö¸øË÷ÒýʹÓÃÁËget´æÈ¡±êÖ¾¡£ÎªÁ˼òµ¥Æä¼û£¬ÎÒºöÂÔÁËÊý×éµÄ±ß½çÒç³ö¼ì²é¡£

5.4 ʼþ
µ±Äãдһ¸öÀàʱ£¬ÓÐʱÓбØÒªÈÃÀàµÄ¿Í»§ÖªµÀһЩÒѾ­·¢ÉúµÄʼþ¡£Èç¹ûÄãÊÇÒ»¸ö¾ßÓжàÄê±à³Ì¾­ÑéµÄ³ÌÐòÔ±£¬ËƺõÓкܶàµÄ½â¾ö°ì·¨£¬°üÀ¨ÓÃÓڻص÷µÄº¯ÊýÖ¸ÕëºÍÓÃÓÚActiveX¿Ø¼þµÄʼþ½ÓÊÕ£¨event sinks)¡£ÏÖÔÚÄ㽫Ҫѧµ½ÁíÍâÒ»Öְѿͻ§´úÂë¹ØÁªµ½Àà֪ͨµÄ°ì·¨¡ª¡ªÊ¹ÓÃʼþ¡£
ʼþ¼È¿ÉÒÔ±»ÉùÃ÷ΪÀàÓò³ÉÔ±£¨³ÉÔ±±äÁ¿£©£¬Ò²¿ÉÒÔ±»ÉùÃ÷ΪÊôÐÔ¡£Á½ÕߵĹ²ÐÔΪ£¬Ê¼þµÄÀàÐͱض¨ÊÇ´ú±íÔª£¬¶øº¯ÊýÖ¸ÕëÔ­ÐκÍC#µÄ´ú±íÔª¾ßÓÐÏàͬµÄº¬Òå¡£
ÿһ¸öʼþ¶¼¿ÉÒÔ±»0»ò¸ü¶àµÄ¿Í»§Õ¼Óã¬ÇÒ¿Í»§¿ÉÒÔËæÊ±¹ØÁª»òÈ¡Ïûʼþ¡£Äã¿ÉÒÔÒÔ¾²Ì¬»òÕßÒÔʵÀý·½·¨¶¨Òå´ú±íÔª£¬¶øºóÕߺÜÊÜC++³ÌÐòÔ±µÄ»¶Ó­¡£
¼ÈÈ»ÎÒÒѾ­Ìáµ½ÁËʼþµÄËùÓй¦Äܼ°ÏàÓ¦µÄ´ú±íÔª£¬Çë¿´Çåµ¥5.11ÖеÄÀý×Ó¡£ËüÉú¶¯µØÌåÏÖÁ˸ÃÀíÂÛ¡£

Çåµ¥5.11 ÔÚÀàÖÐʵÏÖʼþ´¦Àí
1: using System;
2:
3: // ÏòǰÉùÃ÷
4: public delegate void EventHandler(string strText);
5:
6: class EventSource
7: {
8: public event EventHandler TextOut;
9:
10: public void TriggerEvent()
11: {
12: if (null != TextOut) TextOut("Event triggered");
13: }
14: }
15:
16: class TestApp
17: {
18: public static void Main()
19: {
20: EventSource evsrc = new EventSource();
21:
22: evsrc.TextOut += new EventHandler(CatchEvent);
23: evsrc.TriggerEvent();
24:
25: evsrc.TextOut -= new EventHandler(CatchEvent);
26: evsrc.TriggerEvent();
27:
28: TestApp theApp = new TestApp();
29: evsrc.TextOut += new EventHandler(theApp.InstanceCatch);
30: evsrc.TriggerEvent();
31: }
32:
33: public static void CatchEvent(string strText)
34: {
35: Console.WriteLine(strText);
36: }
37:
38: public void InstanceCatch(string strText)
39: {
40: Console.WriteLine("Instance " + strText);
41: }
42: }

µÚ4ÐÐÉùÃ÷ÁË´ú±íÔª£¨Ê¼þ·½·¨Ô­ÐΣ©£¬ËüÓÃÀ´¸øµÚ8ÐÐÖеÄEventSourceÀàÉùÃ÷TextOutʼþÓò³ÉÔ±¡£Äã¿ÉÒԹ۲쵽´ú±íÔª×÷ΪһÖÖеÄÀàÐÍÉùÃ÷£¬µ±ÉùÃ÷ʼþʱ¿ÉÒÔʹÓôú±íÔª¡£
¸ÃÀà½öÓÐÒ»¸ö·½·¨£¬ËüÔÊÐíÎÒÃÇ´¥·¢Ê¼þ¡£Çë×¢Ò⣬Äã±ØÐë½øÐÐʼþÓò³ÉÔ±²»ÎªnullµÄ¼ì²â£¬ÒòΪ¿ÉÄÜ»á³öÏÖûÓпͻ§¶Ôʼþ¸ÐÐËȤÕâÖÖÇé¿ö¡£
TestAppÀà°üº¬ÁËMain ·½·¨£¬Ò²°üº¬ÁËÁíÍâÁ½¸ö·½·¨£¬ËüÃǶ¼¾ß±¸Ê¼þËù±ØÐèµÄÐźš£ÆäÖÐÒ»¸ö·½·¨ÊǾ²Ì¬µÄ£¬¶øÁíÒ»¸öÊÇʵÀý·½·¨¡£
EventSource ±»ÊµÀý»¯£¬¶ø¾²Ì¬·½·¨CatchEvent±»Ô¤¹ØÁªÉÏÁË TextOutʼþ£º
evsrc.TextOut += new EventHandler(CatchEvent);
´ÓÏÖÔÚÆð£¬µ±Ê¼þ±»´¥·¢Ê±£¬¸Ã·½·¨±»µ÷Óá£Èç¹ûÄã¶Ôʼþ²»ÔÙ¸ÐÐËȤ£¬¼òµ¥µØÈ¡Ïû¹ØÁª£º
evsrc.TextOut -= new EventHandler(CatchEvent);
×¢Ò⣬Äã²»ÄÜËæÒâÈ¡Ïû¹ØÁªµÄ´¦Àíº¯Êý¡ª¡ªÔÚÀà´úÂëÖнö´´½¨ÁËÕâЩ´¦Àíº¯Êý¡£ÎªÁËÖ¤Ã÷ʼþ´¦Àíº¯ÊýÒ²ºÍʵÀý·½·¨Ò»Æð¹¤×÷£¬ÓàϵĴúÂ뽨Á¢ÁËTestApp µÄʵÀý£¬²¢¹³×¡Ê¼þ´¦Àí·½·¨¡£
ʼþÔÚÄÄ·½Ãæ¶ÔÄãÌØ±ðÓÐÓã¿Ä㽫¾­³£ÔÚASP+ÖлòʹÓõ½WFC (Windows Foundation Classes)ʱ£¬Éæ¼°µ½Ê¼þºÍ´ú±íÔª¡£

5.5 Ó¦ÓÃÐÞÊηû
ÔÚÕâÒ»ÕµÄѧϰ¹ý³ÌÖУ¬ÄãÒѾ­¼û¹ýÁËÏópublic¡¢virtualµÈÐÞÊηû¡£ÓûÒÔÒ»ÖÖÒ×ÓÚÀí½âµÄ·½·¨¸ÅÀ¨ËüÃÇ£¬ÎÒ°ÑËüÃÇ»®·ÖΪÈý½Ú£º

¡£ÀàÐÞÊηû
¡£³ÉÔ±ÐÞÊηû
¡£´æÈ¡ÐÞÊηû

5.5.1 ÀàÐÞÊηû
µ½Ä¿Ç°ÎªÖ¹£¬ÎÒ»¹Ã»ÓÐÉæ¼°µ½ÀàÐÞÊηû£¬¶øÖ»Éæ¼°µ½ÁËÓ¦ÓÃÓÚÀàµÄ´æÈ¡ÐÞÊηû¡£µ«ÊÇ£¬ÓÐÁ½¸öÐÞÊηûÄã¿ÉÒÔÓÃÓÚÀࣺ
abstract¡ª¡ª¹ØÓÚ³éÏóÀàµÄÖØÒªÒ»µã¾ÍÊÇËü²»Äܱ»ÊµÀý»¯¡£Ö»Óв»ÊdzéÏóµÄÅÉÉúÀà²ÅÄܱ»ÊµÀý»¯¡£ÅÉÉúÀà±ØÐëʵÏÖ³éÏó»ùÀàµÄËùÓгéÏó³ÉÔ±¡£Äã²»Äܸø³éÏóÀàʹÓÃsealed ÐÞÊηû¡£
sealed¡ª¡ªÃÜ·â À಻Äܱ»¼Ì³Ð¡£Ê¹ÓøÃÐÞÊηû·ÀÖ¹ÒâÍâµÄ¼Ì³Ð£¬ÔÚ.NET¿ò¼ÜÖеÄÀàÓõ½Õâ¸öÐÞÊηû¡£
Òª¼ûµ½Á½¸öÐÞÊηûµÄÔËÓ㬿´¿´Çåµ¥5.12 £¬Ëü´´½¨ÁËÒ»¸ö»ùÓÚÒ»¸ö³éÏóÀàµÄÃÜ·âÀࣨ¿Ï¶¨ÊÇÒ»¸öÊ®·Ö¼«¶ËµÄÀý×Ó£©¡£

Çåµ¥ 5.12 ³éÏóÀàºÍÃÜ·âÀà

1: using System;
2:
3: abstract class AbstractClass
4: {
5: abstract public void MyMethod();
6: }
7:
8: sealed class DerivedClass:AbstractClass
9: {
10: public override void MyMethod()
11: {
12: Console.WriteLine("sealed class");
13: }
14: }
15:
16: public class TestApp
17: {
18: public static void Main()
19: {
20: DerivedClass dc = new DerivedClass();
21: dc.MyMethod();
22: }
23: }

5.5.2 ³ÉÔ±ÐÞÊηû
ÓëÓÐÓõijÉÔ±ÐÞÊηûµÄÊýÁ¿Ïà±È£¬ÀàÐÞÊηûµÄÊýÁ¿ºÜÉÙ¡£ÎÒÒѾ­Ìáµ½ÁËһЩ£¬Õâ±¾Êé¼´½«³öÏÖµÄÀý×ÓÃèÊöÁËÆäËüµÄ³ÉÔ±ÐÞÊηû¡£
ÒÔÏÂÊÇÓÐÓõijÉÔ±ÐÞÊηû£º
abstract¡ª¡ªËµÃ÷Ò»¸ö·½·¨»ò´æÈ¡±êÖ¾²»Äܺ¬ÓÐÒ»¸öʵÏÖ¡£ËüÃǶ¼ÊÇÒþʽÐéÄ⣬ÇÒÔڼ̳ÐÀàÖУ¬Äã±ØÐëÌṩ override¹Ø¼ü×Ö¡£
const¡ª¡ªÕâ¸öÐÞÊηûÓ¦ÓÃÓÚÓò³ÉÔ±»ò¾Ö²¿±äÁ¿¡£ÔÚ±àÒëʱ³£Á¿±í´ïʽ±»ÇóÖµ£¬ËùÒÔ£¬Ëü²»Äܰüº¬±äÁ¿µÄÒýÓá£
event ¡ª¡ª¶¨ÒåÒ»¸öÓò³ÉÔ±»òÊôÐÔ×÷ΪÀàÐÍʼþ¡£ÓÃÓÚÀ¦°ó¿Í»§´úÂëµ½ÀàµÄʼþ¡£
extern¡ª¡ª¸æËß±àÒëÆ÷·½·¨Êµ¼ÊÉÏÓÉÍⲿʵÏÖ¡£µÚ10Õ ¡°ºÍ·ÇÊܹܴúÂ뻥Ïà²Ù×÷¡± ½«È«ÃæµØÉæ¼°µ½Íⲿ´úÂë¡£
override¡ª¡ªÓÃÓÚ¸ÄдÈκλùÀàÖб»¶¨ÒåΪvirtualµÄ·½·¨ºÍ´æÈ¡±êÖ¾¡£Òª¸ÄдµÄÃû×ֺͻùÀàµÄ·½·¨±ØÐëÒ»Ö¡£
readonly¡ª¡ªÒ»¸öʹÓà readonlyÐÞÊηûµÄÓò³ÉÔ±Ö»ÄÜÔÚËüµÄÉùÃ÷»òÕßÔÚ°üº¬ËüµÄÀàµÄ¹¹Ô캯ÊýÖб»¸ü¸Ä¡£

static¡ª¡ª±»ÉùÃ÷ΪstaticµÄ³ÉÔ±ÊôÓÚÀ࣬¶ø²»ÊôÓÚÀàµÄʵÀý¡£Äã¿ÉÒÔÓÃstatic ÓÚÓò³ÉÔ±¡¢·½·¨¡¢ÊôÐÔ¡¢²Ù×÷·ûÉõÖÁ¹¹Ô캯Êý¡£
virtual¡ª¡ªËµÃ÷·½·¨»ò´æÈ¡±êÖ¾¿ÉÒÔ±»¼Ì³ÐÀà¸Äд¡£

5.5.3 ´æÈ¡ÐÞÊηû
´æÈ¡ÐÞÊηû¶¨ÒåÁËijЩ´úÂë¶ÔÀà³ÉÔ±£¨Èç·½·¨ºÍÊôÐÔ£©µÄ´æÈ¡µÈ¼¶¡£Äã±ØÐë¸øÃ¿¸ö³ÉÔ±¼ÓÉÏËùÏ£ÍûµÄ´æÈ¡ÐÞÊηû£¬·ñÔò£¬Ä¬ÈϵĴæÈ¡ÀàÐÍÊÇÒþº¬µÄ¡£
Äã¿ÉÒÔÓ¦ÓÃ4¸ö ´æÈ¡ÐÞÊηûÖ®Ò»£º
public¡ª¡ªÈκεط½¶¼¿ÉÒÔ·ÃÎʸóÉÔ±£¬ÕâÊǾßÓÐ×îÉÙÏÞÖÆµÄ´æÈ¡ÐÞÊηû¡£
protected¡ª¡ªÔÚÀ༰ËùÓеÄÅÉÉúÀàÖпÉÒÔ·ÃÎʸóÉÔ±£¬²»ÔÊÐíÍⲿ·ÃÎÊ¡£
private¡ª¡ª½ö½öÔÚͬһ¸öÀàµÄÄÚ²¿²ÅÄÜ·ÃÎʸóÉÔ±¡£ÉõÖÁÅÉÉúÀà¶¼²»ÄÜ·ÃÎÊËü¡£
internal¡ª¡ªÔÊÐíÏàͬ×é¼þ£¨Ó¦ÓóÌÐò»ò¿â£©µÄËùÓдúÂë·ÃÎÊ¡£ÔÚ.NET×é¼þ¼¶±ð£¬Äã¿ÉÒÔ°ÑËüÊÓΪpublic£¬¶øÔÚÍⲿÔòΪprivate¡£
ΪÁËÑÝʾ´æÈ¡ÐÞÊηûµÄÓ÷¨£¬ÎÒÉÔ΢ÐÞ¸ÄÁËTriangleÀý×Ó£¬Ê¹Ëü°üº¬ÁËÐÂÔöµÄÓò³ÉÔ±ºÍÒ»¸öеÄÅÉÉúÀࣨ¼ûÇåµ¥ 5.13£©¡£

Çåµ¥ 5.13 ÔÚÀàÖÐʹÓôæÈ¡ÐÞÊηû

1: using System;
2:
3: internal class Triangle
4: {
5: protected int m_a, m_b, m_c;
6: public Triangle(int a, int b, int c)
7: {
8: m_a = a;
9: m_b = b;
10: m_c = c;
11: }
12:
13: public virtual double Area()
14: {
15: // Heronian formula
16: double s = (m_a + m_b + m_c) / 2.0;
17: double dArea = Math.Sqrt(s*(s-m_a)*(s-m_b)*(s-m_c));
18: return dArea;
19: }
20: }
21:
22: internal class Prism:Triangle
23: {
24: private int m_h;
25: public Prism(int a, int b, int c, int h):base(a,b,c)
26: {
27: m_h = h;
28: }
29:
30: public override double Area()
31: {
32: double dArea = base.Area() * 2.0;
33: dArea += m_a*m_h + m_b*m_h + m_c*m_h;
34: return dArea;
35: }
36: }
37:
38: class PrismApp
39: {
40: public static void Main()
41: {
42: Prism prism = new Prism(2,5,6,1);
43: Console.WriteLine(prism.Area());
44: }
45: }

Triangle ÀàºÍ Prism ÀàÏÖÔÚ±»±êΪ internal¡£ÕâÒâζ×ÅËüÃÇÖ»ÄÜÔÚµ±Ç°×é¼þÖб»·ÃÎÊ¡£Çë¼Çס¡°.NET×é¼þ¡±Õâ¸öÊõÓïÖ¸µÄÊǰü×°£¨ packaging,£©£¬¶ø²»ÊÇÄã¿ÉÄÜÔÚCOM+ÖÐÓõ½µÄ×é¼þ¡£Triangle ÀàÓÐÈý¸ö protected³ÉÔ±£¬ËüÃÇÔÚ¹¹Ô캯ÊýÖб»³õʼ»¯£¬²¢ÓÃÓÚÃæ»ý¼ÆËãµÄ·½·¨ÖС£ÓÉÓÚÕâЩ³ÉÔ±ÊÇprotected ³ÉÔ±£¬ËùÒÔÎÒ¿ÉÒÔÔÚÅÉÉúÀàPrismÖзÃÎÊËüÃÇ£¬ÔÚÄÇÀïÖ´Ðв»Í¬µÄÃæ»ý¼ÆËã¡£Prism×Ô¼ºÐÂÔöÁËÒ»¸ö³ÉÔ±m_h£¬ËüÊÇ˽Óеġª¡ªÉõÖÁÅÉÉúÀàÒ²²»ÄÜ·ÃÎÊËü¡£
»¨Ð©Ê±¼äΪÿ¸öÀà³ÉÔ±ÉõÖÁÿ¸öÀà¼Æ»®Ò»ÖÖ±£»¤²ã´Î£¬Í¨³£ÊǸöºÃÖ÷Òâ¡£µ±ÐèÒªÒýÈëÐÞ¸Äʱ£¬È«ÃæµÄ¼Æ»®×îÖÕ»á°ïÖúÄ㣬ÒòΪûÓгÌÐòÔ±»áÔ¸ÒâʹÓá°Ã»ÓÐÎĵµ¡±µÄÀ๦ÄÜ¡£
5.6 С½á
ÕâÕÂÏÔʾÁËÀàµÄ¸÷ÖÖÒªËØ£¬ËüÊÇÔËÐÐʵÀý£¨¶ÔÏ󣩵ÄÄ£°å¡£ÔÚÒ»¸ö¶ÔÏóµÄÉúÃüÆÚ£¬Ê×Ïȱ»Ö´ÐеĴúÂëÊǸö¹¹Ô캯Êý¡£¹¹Ô캯ÊýÓÃÀ´³õʼ»¯±äÁ¿£¬ÕâЩ±äÁ¿ºóÀ´ÔÚ·½·¨ÖÐÓÃÓÚ¼ÆËã½á¹û¡£
·½·¨ÔÊÐíÄã´«µÝÖµ¡¢ÒýÓøø±äÁ¿£¬»òÕßÖ»´«ËÍÒ»¸öÊä³öÖµ¡£·½·¨¿ÉÒÔ±»¸ÄдÒÔʵÏÖÐµĹ¦ÄÜ£¬»òÕßÄã¿ÉÒÔÆÁ±Î»ùÀà³ÉÔ±£¬Èç¹ûËüʵÏÖÁËÒ»¸ö¾ßÓкÍÅÉÉúÀà³ÉÔ±ÏàͬÃû×ֵķ½·¨¡£
ÃüÃûÊôÐÔ¿ÉÒÔ±»µ±×÷Óò³ÉÔ±£¨³ÉÔ±±äÁ¿£©»òÊôÐÔ´æÈ¡±ê־ʵÏÖ¡£ºóÕßÊÇgetºÍset´æÈ¡±êÖ¾£¬ºöÂÔÒ»¸ö»òÁíÍâÒ»¸ö£¬Äã¿ÉÒÔ´´½¨½öд»ò½ö¶ÁÊôÐÔ¡£´æÈ¡±êÖ¾·Ç³£ÊʺÏÓÚÈ·Èϸ³¸øÊôÐÔµÄÖµ¡£
C#ÀàµÄÁíÍâÒ»¸ö¹¦ÄÜÊÇË÷Òý£¬ËüʹÏóÊý×éÓï·¨Ò»Ñù·ÃÎÊÀàÖÐÖµ³ÉΪ¿ÉÄÜ¡£»¹ÓУ¬Èç¹ûµ±ÀàÖеÄijЩÊÂÇé·¢Éúʱ£¬ÄãÏë¿Í»§µÃµ½Í¨Öª£¬ÒªÈÃËüÃÇÓëʼþ¹ØÁª¡£
µ±À¬»øÊÕ¼¯Æ÷µ÷ÓÃÎö¹¹º¯Êýʱ£¬¶ÔÏóµÄÉúÃü¾Í½áÊøÁË¡£ÓÉÓÚÄã²»ÄÜ׼ȷµØÔ¤²âÕâÖÖÇé¿öʲôʱºò»á·¢Éú£¬ËùÒÔÓ¦¸Ã´´½¨Ò»¸ö·½·¨ÒÔÊÍ·ÅÕâЩ±¦¹óµÄ×ÊÔ´£¬µ±ÄãֹͣʹÓÃËüÃÇʱ¡£

 

µÚÁùÕ ¿ØÖÆÓï¾ä¡¡¡¡¡¡¡¡»Ø¶¥²¿

ÓÐÒ»ÖÖÓï¾ä£¬ÄãÔÚÿÖÖ±à³ÌÓïÑÔ¿ØÖÆÁ÷³ÌÓï¾äÖж¼¿ÉÒÔÕÒµ½¡£ÔÚÕâÒ»ÕÂÖУ¬ÎÒ½éÉÜC#µÄ¿ØÖÆÓï¾ä£¬ËüÃÇ·ÖΪÁ½¸öÖ÷Òª²¿·Ö£º

¡£Ñ¡ÔñÓï¾ä

¡£Ñ­»·Óï¾ä

Èç¹ûÄãÊÇC»òC++³ÌÐòÔ±£¬ºÜ¶àÐÅÏ¢»áÈÃÄã¸Ðµ½ËÆÔøÏàËÆ£»µ«ÊÇ£¬Äã±ØÐëÖªµÀËüÃÇ»¹´æÔÚ×ÅһЩ²îÒì¡£

6.1 Ñ¡ÔñÓï¾ä

µ±ÔËÓÃÑ¡ÔñÓï¾äʱ£¬Ä㶨ÒåÁËÒ»¸ö¿ØÖÆÓï¾ä£¬ËüµÄÖµ¿ØÖÆÁËÄÄÒ»ÌõÓï¾ä±»Ö´ÐС£ÔÚC#ÖÐÓõ½Á½ÖÖÑ¡ÔñÓï¾ä£º

¡£if Óï¾ä

¡£switch Óï¾ä

6.1.1 if Óï¾ä

×îÏÈÇÒ×î³£Óõ½µÄÓï¾äÊÇ if Óï¾ä¡£ÄÚº¬Óï¾äÊÇ·ñ±»Ö´ÐÐÈ¡¾öÓÚ²¼¶û±í´ïʽ£º

if (²¼¶û±í´ïʽ) ÄÚº¬Óï¾ä

µ±È»£¬Ò²¿ÉÒÔÓÐelse ·ÖÖ¦£¬µ±²¼¶û±í´ïʽµÄֵΪ¼Ùʱ£¬¸Ã·ÖÖ¦¾Í±»Ö´ÐУº

if (²¼¶û±í´ïʽ) ÄÚº¬Óï¾ä else ÄÚº¬Óï¾ä

ÔÚÖ´ÐÐijЩÓï¾ä֮ǰ¾Í¼ì²éÒ»¸ö·ÇÁ㳤×Ö·û´®µÄÀý×Ó£º

if (0 != strTest.Length)

{

}

ÕâÊÇÒ»¸ö²¼¶û±í´ïʽ¡££¨!=±íʾ²»µÈÓÚ¡££© µ«ÊÇ£¬Èç¹ûÄãÔ­À´ÓÃC»òÕßC++£¬¿ÉÄÜ»áϰ¹ßÓÚ±àдÏóÕâÑùµÄ´úÂ룺

if (strTest.Length)

{

}

ÕâÑùµÄд·¨ÔÚC#Öв»ÔÙÓÐЧ£¬ÒòΪ if Óï¾äÖ»½ÓÊܲ¼¶û( bool£©Êý¾ÝÀàÐ͵Ľá¹û£¬¶ø×Ö·û´®µÄLengthÊôÐÔ¶ÔÏó·µ»ØÒ»¸öÕûÐΣ¨integer£©¡£±àÒëÆ÷½«³öÏÖÒÔÏ´íÎóÐÅÏ¢£º

error CS0029: Cannot implicitly convert type 'int' to 'bool' £¨²»ÄÜÒþʽµØ×ª»»ÀàÐÍ 'int' Ϊ 'bool'¡££©

Äã±ØÐë¸Ä±ä²»Á¼µÄ±àдϰ¹ß£¬²»ÒªÔÙÔÚ if Óï¾äÖгöÏÖÏÂÃæÕâÖÖ¸³Öµ´íÎó£º

if (nMyValue = 5) ...

ÕýÈ·µÄ´úÂëӦΪ

if (nMyValue == 5) ...

ÒòΪÏàµÈ±È½ÏÓÉ==ʵÐУ¬¾ÍÏóÔÚCºÍC++ÖÐÒ»Ñù¡£¿´ÒÔÏÂÓÐÓõĶԱȲÙ×÷·û£¨µ«²¢²»ÊÇËùÓеÄÊý¾ÝÀàÐͶ¼ÓÐЧ£©£º

== ¡ª¡ªÈç¹ûÁ½¸öÖµÏàͬ£¬·µ»ØÕæ¡£ != ¡ª¡ªÈç¹ûÁ½¸öÖµ²»Í¬£¬·µ»Ø¼Ù¡£

<, <=, >, >= ¡ª¡ª Èç¹ûÂú×ãÁ˹ØÏµ£¨Ð¡ÓÚ¡¢Ð¡ÓÚ»òµÈÓÚ¡¢´óÓÚ¡¢´óÓÚ»òµÈÓÚ£©£¬·µ»ØÕæ¡£

ÿ¸ö²Ù×÷·ûÊÇͨ¹ýÖØÔØ²Ù×÷·û±»Ö´Ðе쬶øÇÒÕâÖÖÖ´ÐжÔÊý¾ÝÀàÐÍÓй涨¡£Èç¹ûÄã±È½ÏÁ½¸ö²»Í¬µÄÀàÐÍ£¬¶ÔÓÚ±àÒëÆ÷£¬±ØÐë´æÔÚ×ÅÒ»¸öÒþʽµÄת»»£¬ÒÔ±ã×Ô¶¯µØ´´½¨±ØÒªµÄ´úÂë¡£µ«ÊÇ£¬Äã¿ÉÒÔÖ´ÐÐÒ»¸öÏÔʽµÄÀàÐÍת»»¡£

Çåµ¥ 6.1 ÖеĴúÂëÑÝʾÁË if Óï¾äµÄһЩ²»Í¬µÄʹÓó¡ºÏ£¬Í¬Ê±Ò²ÑÝʾÁËÈçºÎʹÓÃ×Ö·û´®Êý¾ÝÀàÐÍ¡£Õâ¸ö³ÌÐòµÄÖ÷Ҫ˼ÏëÊÇ£¬È·¶¨´«µÝ¸øÓ¦ÓóÌÐòµÄµÚÒ»¸ö²ÎÊýÊÇ·ñÒÔ´óд×Öĸ¡¢Ð¡Ð´×Öĸ»òÕßÊý×Ö¿ªÊ¼¡£

Çåµ¥ 6.1 È·¶¨×Ö·ûµÄÐÎ̬

1: using System;

2:

3: class NestedIfApp

4: {

5: public static int Main(string[] args)

6: {

7: if (args.Length != 1)

8: {

9: Console.WriteLine("Usage: one argument");

10: return 1; // error level

11: }

12:

13: char chLetter = args[0][0];

14:

15: if (chLetter >= 'A')

16: if (chLetter <= 'Z')

17: {

18: Console.WriteLine("{0} is uppercase",chLetter);

19: return 0;

20: }

21:

22: chLetter = Char.FromString(args[0]);

23: if (chLetter >= 'a' && chLetter <= 'z')

24: Console.WriteLine("{0} is lowercase",chLetter);

25:

26: if (Char.IsDigit((chLetter = args[0][0])))

27: Console.WriteLine("{0} is a digit",chLetter);

28:

29: return 0;

30: }

31: }

ʼÓÚµÚ7ÐеĵÚÒ»¸ö if Óï¿é¼ì²â²ÎÊýÊý×éÊÇ·ñÖ»ÓÐÒ»¸ö×Ö·û´®²ÎÊý¡£Èç¹û²»Âú×ãÌõ¼þ£¬³ÌÐò¾ÍÔÚÆÁÄ»ÉÏÏÔʾÓ÷¨ÐÅÏ¢£¬²¢ÖÕÖ¹ÔËÐС£

¿ÉÒÔ²ÉÈ¡¶àÖÖ·½·¨´ÓÒ»¸ö×Ö·û´®ÖÐÌáÈ¡³öµ¥¸ö×Ö·û¡ª¡ª¼È¿ÉÏóµÚ13ÐÐÄÇÑùÀûÓÃ×Ö·ûϱ꣬Ҳ¿ÉÒÔʹÓÃCharÀàµÄ¾²Ì¬ FromString ·½·¨£¬Ëü·µ»Ø×Ö·û´®µÄµÚÒ»¸ö×Ö·û¡£

µÚ16¡«20ÐÐµÄ if Óï¾ä¿éʹÓÃÒ»¸öǶÌ× µÄif Óï¾ä¿é¼ì²é´óд×Öĸ¡£ÓÃÂß¼­¡°Ó롱²Ù×÷·û£¨&&£©¿ÉÒÔʤÈÎСд×ÖĸµÄ¼ì²â£¬¶ø×îºóͨ¹ýʹÓÃCharÀàµÄ¾²Ì¬º¯ÊýIsDigit£¬¾Í¿ÉÒÔÍê³É¶ÔÊý×ֵļì²â¡£

³ýÁË¡°&&¡±²Ù×÷·ûÖ®Í⣬»¹ÓÐÁíÒ»¸öÌõ¼þÂß¼­²Ù×÷·û£¬Ëü¾ÍÊÇ´ú±í¡°»ò¡±µÄ¡°||¡±¡£Á½¸öÂß¼­²Ù×÷·û¶¼ÊÇ¡°¶Ì·¡±Ê½µÄ¡£¶ÔÓÚ¡°&&¡±²Ù×÷·û£¬Òâζ×ÅÈç¹ûÌõ¼þ¡°Ó롱±í´ïʽµÄµÚÒ»¸ö½á¹û·µ»ØÒ»¸ö¼ÙÖµ£¬ÓàϵÄÌõ¼þ¡°Ó롱±í´ïʽ¾Í²»»áÔÙ±»ÇóÖµÁË¡£Ïà¶ÔÓ¦£¬¡°||¡±²Ù×÷·ûµ±µÚÒ»¸öÕæÌõ¼þÂú×ãʱ£¬Ëü¾Í¡°¶Ì·¡±ÁË¡£

ÎÒÏëÈôó¼ÒÀí½âµÄÊÇ£¬Òª¼õÉÙ¼ÆËãʱ¼ä£¬ÄãÓ¦¸Ã°Ñ×îÓпÉÄÜʹÇóÖµ¡°¶Ì·¡±µÄ±í´ïʽ·ÅÔÚÇ°Ãæ¡£Í¬ÑùÄãÓ¦¸ÃÇå³þ£¬¼ÆËã if Óï¾äÖеÄijЩֵ»á´æÔÚ×ÅÌæÔÚµÄΣÏÕ¡£

if (1 == 1 || (5 == (strLength=str.Length)))

{

Console.WriteLine(strLength);

}

µ±È»£¬ÕâÊÇÒ»¸ö¼«Æä¿äÕŵÄÀý×Ó£¬µ«Ëü˵Ã÷ÁËÕâÑùµÄ¹Ûµã£ºµÚÒ»ÌõÓï¾äÇóÖµÎªÕæ£¬ÄÇôµÚ¶þÌõÓï¾ä¾Í²»»á±»Ö´ÐУ¬Ëüʹ±äÁ¿strLengthά³ÖÔ­Öµ¡£¸ø´ó¼ÒÒ»¸öÖҸ棺¾ö²»ÒªÔÚ¾ßÓÐÌõ¼þÂß¼­²Ù×÷·ûµÄ if Óï¾äÖи³Öµ¡£

6.1.2 switch Óï¾ä

ºÍ if Óï¾äÏà±È£¬switchÓï¾äÓÐÒ»¸ö¿ØÖƱí´ïʽ£¬¶øÇÒÄÚº¬Óï¾ä°´ËüÃÇËù¹ØÁªµÄ¿ØÖƱí´ïʽµÄ³£Á¿ÔËÐС£

switch (¿ØÖƱí´ïʽ)

{

case ³£Á¿±í´ïʽ:

ÄÚº¬Óï¾ä

default:

ÄÚº¬Óï¾ä

}

¿ØÖƱí´ïʽËùÔÊÐíµÄÊý¾ÝÀàÐÍ Îª£º sbyte, byte, short, ushort, uint, long, ulong, char, string, »òÕßö¾ÙÀàÐÍ¡£Ö»ÒªÊ¹ÆäËü²»Í¬Êý¾ÝÀàÐÍÄÜÒþʽת»»³ÉÉÏÊöµÄÈκÎÀàÐÍ£¬ÓÃËü×÷Ϊ¿ØÖƱí´ïʽҲºÜ²»´í¡£

switch Óï¾ä½ÓÒÔÏÂ˳ÐòÖ´ÐУº

1¡¢¿ØÖƱí´ïʽÇóÖµ

2¡¢Èç¹û case ±êÇ©ºóµÄ³£Á¿±í´ïʽ·ûºÏ¿ØÖÆÓï¾äËùÇó³öµÄÖµ£¬ÄÚº¬Óï¾ä±»Ö´ÐС£

3¡¢Èç¹ûûÓг£Á¿±í´ïʽ·ûºÏ¿ØÖÆÓï¾ä£¬ÔÚdefault ±êÇ©ÄÚµÄÄÚº¬Óï¾ä±»Ö´ÐС£

4¡¢Èç¹ûûÓÐÒ»¸ö·ûºÏcase ±êÇ©£¬ÇÒûÓÐdefault ±êÇ©£¬¿ØÖÆ×ªÏòswitch Óï¶ÎµÄ½áÊø¶Ë¡£

ÔÚ¼ÌÐø¸üÏêϸµØÌ½ÌÖswitchÓï¾ä֮ǰ£¬Çë¿´Çåµ¥ 6.2 £¬ËüÑÝʾÓà switchÓï¾äÀ´ÏÔʾһ¸öÔµÄÌìÊý£¨ºöÂÔ¿çÄê¶È£©

Çåµ¥ 6.2 ʹÓÃswitchÓï¾äÏÔʾһ¸öÔµÄÌìÊý

1: using System;

2:

3: class FallThrough

4: {

5: public static void Main(string[] args)

6: {

7: if (args.Length != 1) return;

8:

9: int nMonth = Int32.Parse(args[0]);

10: if (nMonth < 1 || nMonth > 12) return;

11: int nDays = 0;

12:

13: switch (nMonth)

14: {

15: case 2: nDays = 28; break;

16: case 4:

17: case 6:

18: case 9:

19: case 11: nDays = 30; break;

20: default: nDays = 31;

21: }

22: Console.WriteLine("{0} days in this month",nDays);

23: }

24: }

switch Óï¿é´ÓµÚ13ÖÁ21ÐС£¶ÔÓÚC³ÌÐòÔ±£¬Õâ¿´ÆðÀ´·Ç³£ÏàËÆ£¬ÒòΪËü²»Ê¹ÓÃbreakÓï¾ä¡£Òò´Ë£¬´æÔÚ×ÅÒ»¸ö¸ü¾ßÉúÃüÁ¦µÄÖØÒª²î±ð¡£Äã±ØÐë¼ÓÉÏÒ»¸öbreakÓï¾ä£¨»òÒ»¸ö²»Í¬µÄÌø×ªÓï¾ä£©£¬ÒòΪ±àÒëÆ÷»áÌáÐÑ£¬²»ÔÊÐí¡°Ö±Í¨¡±(fall-through)ÏÂÒ»²¿·Ö¡£

ºÎν¡°Ö±Í¨¡±£¿ÔÚC£¨ºÍC++£©ÖУ¬ºöÂÔbreak²¢ÇÒ°´ÒÔϱàд´úÂëÊÇÍêÈ«ºÏ·¨µÄ£º

nVar = 1

switch (nVar)

{

case 1:

DoSomething();

case 2:

DoMore();

}

ÔÚÕâ¸öÀý×ÓÖУ¬ÔÚÖ´ÐÐÁ˵ÚÒ»¸öcaseÓï¾äµÄ´úÂëºó£¬½«Ö±½ÓÖ´Ðе½ÆäËücase±êÇ©µÄ´úÂ룬ֱµ½Ò»¸öbreakÓï¾äÍ˳öswitchÓï¶ÎΪֹ¡£¾¡¹ÜÓÐʱÕâÊÇÒ»¸öÇ¿´óµÄ¹¦ÄÜ£¬µ«Ëü¸ü¾­³£µØ²úÉúÄÑÓÚ·¢ÏÖµÄȱÏÝ¡£ ¿ÉÈç¹ûÄãÏëÖ´ÐÐÆäËücase±êÇ©µÄ´úÂ룬ÄÇÔõ

ô°ì£¿ ÓÐÒ»ÖÖ°ì·¨£¬ËüÏÔʾÓÚÇåµ¥6.3ÖС£

Çåµ¥ 6.3¡¡ÔÚswtichÓï¾äÖÐʹÓà goto ±êÇ©¡¡ºÍ goto default

1: using System;

2:

3: class SwitchApp

4: {

5: public static void Main()

6: {

7: Random objRandom = new Random();

8: double dRndNumber = objRandom.NextDouble();

9: int nRndNumber = (int)(dRndNumber * 10.0);

10:

11: switch (nRndNumber)

12: {

13: case 1:

14: //ʲôҲ²»×ö

15: break;

16: case 2:

17: goto case 3;

18: case 3:

19: Console.WriteLine("Handler for 2 and 3");

20: break;

21: case 4:

22: goto default;

23: // everything beyond a goto will be warned as

24: // unreachable code

25: default:

26: Console.WriteLine("Random number {0}", nRndNumber);

27: }

28: }

29: }

ÔÚÕâ¸öÀý×ÓÖУ¬Í¨¹ýRandomÀà²úÉúµÄÖµ½«ÓÃÓÚ¿ØÖƱí´ïʽ£¨µÚ£·¡«£¹ÐУ©¡£switchÓï¿é°üº¬Á½¸ö¶ÔswitchÓï¾äÓÐЧµÄÌø×ªÓï¾ä¡£ ¡¡¡¡goto case ¡¡±êÇ©£ºÌø×ªµ½Ëù˵Ã÷µÄ±êÇ©

¡¡¡¡goto default: Ìø×ªµ½ default¡¡±êÇ©

¡¡¡¡ÓÐÁËÕâÁ½¸öÌø×ªÓï¾ä£¬Äã¿ÉÒÔ´´½¨Í¬£ÃÒ»ÑùµÄ¹¦ÄÜ£¬µ«ÊÇ£¬Ö±Í¨²»ÔÙÊÇ×Ô¶¯µÄ¡£Äã±ØÐëÃ÷È·µØÇëÇóËü¡£

¡¡¡¡²»ÔÙʹÓÃֱͨ¹¦ÄܵĸüÉîµÄº¬ÒåΪ£ºÄã¿ÉÈÎÒâÅÅÁбêÇ©£¬Èç°Ñdefault±êÇ©·ÅÔÚÆäËüËùÓбêÇ©µÄÇ°Ãæ¡£ÎªÁË˵Ã÷Ëü£¬ÎÒ´´½¨ÁËÒ»¸öÀý×Ó£¬¹ÊÒâ²»½áÊøÑ­»·£º

switch (nSomething)

{

default:

case 5:

goto default;

}

¡¡¡¡ÎÒÒѾ­±£ÁôÁËÆäÖÐÒ»¸öswich Óï¾ä¹¦ÄܵÄÌÖÂÛÖ±ÖÁ½áÊø¡ª¡ªÊÂʵÉÏÄã¿ÉÒÔʹÓÃ×Ö·û´®×÷Ϊ³£Á¿±í´ïʽ¡£Õâ¶ÔÓÚVB³ÌÐòÔ±£¬¿ÉÄÜÌýÆðÀ´²»ÏóÊÇʲô¾ªÈ˵ÄÐÂÎÅ£¬µ«À´×ԣûò £Ã£«£«µÄ³ÌÐòÔ±½«»áϲ»¶Õâ¸öй¦ÄÜ¡£

ÏÖÔÚ£¬Ò»¸ö switch Óï¾ä¿ÉÒÔÈçÒÔÏÂËùʾ¼ì²é×Ö·û´®³£Á¿ÁË¡£

string strTest = "Chris";

switch (strTest)

{

case "Chris":

Console.WriteLine("Hello Chris!");

break;

}

6.2 Ñ­»·Óï¾ä

¡¡¡¡µ±ÄãÏëÖØ¸´Ö´ÐÐijЩÓï¾ä»òÓï¿éʱ£¬ÒÀ¾Ýµ±Ç°²»Í¬µÄÈÎÎñ£¬£Ã££Ìṩ£´ÖÖ²»Í¬µÄÑ­»·Óï¾äÑ¡Ôñ¸øÄãʹÓãº

¡£ for Óï¾ä

¡£foreach Óï¾ä

¡£ while Óï¾ä

¡£do Óï¾ä

6.2.1 for Óï¾ä

¡¡¡¡µ±ÄãÔ¤ÏÈÖªµÀÒ»¸öÄÚº¬Óï¾äÓ¦ÒªÖ´ÐжàÉÙ´Îʱ£¬for Óï¾äÌØ±ðÓÐÓᣵ±Ìõ¼þÎªÕæÊ±£¬³£¹æÓï·¨ÔÊÐíÖØ¸´µØÖ´ÐÐÄÚº¬Óï¾ä£¨ºÍÑ­»·±í´ïʽ£©£º

for (³õʼ»¯;Ìõ¼þ;Ñ­»·) ÄÚº¬Óï¾ä

Çë×¢Ò⣬³õʼ»¯¡¢Ìõ¼þºÍÑ­»·¶¼ÊÇ¿ÉÑ¡µÄ¡£Èç¹ûºöÂÔÁËÌõ¼þ£¬Äã¾Í¿ÉÒÔ²úÉúÒ»¸öËÀÑ­»·£¬ÒªÓõ½Ìø×ªÓï¾ä£¨break »ògoto£©²ÅÄÜÍ˳ö¡£

for (;;)

{

break; // ÓÉÓÚijЩԭÒò

}

ÁíÍâÒ»¸öÖØµãΪ£¬Äã¿ÉÒÔͬʱ¼ÓÈë¶àÌõÓɶººÅ¸ô¿ªµÄÓï¾äµ½forÑ­»·µÄËùÓÐÈý¸ö²ÎÊý¡£ÀýÈ磬Äã¿ÉÒÔ³õʼ»¯Á½¸ö±äÁ¿¡¢ÓµÓÐÈý¸öÌõ¼þÓï¾ä£¬²¢Öظ´4¸ö±äÁ¿¡£ ×÷ΪC»òC++³ÌÐòÔ±£¬Äã±ØÐëÁ˽â½öÓеÄÒ»¸ö±ä»¯£ºÌõ¼þÓï¾ä±ØÐëΪ²¼¶û±í´ïʽ£¬¾ÍÏó if Óï¾äÒ»Ñù¡£

Çåµ¥6.4 °üº¬Ê¹Óà for Óï¾äµÄÒ»¸öÀý×Ó¡£ËüÏÔʾÁËÈçºÎ¼ÆËãÒ»¸ö½×³Ë£¬±ÈʹÓõݹ麯Êýµ÷Óû¹Òª¿ì¡£

Çåµ¥ 6.4 ÔÚfor Ñ­»·Àï¼ÆËãÒ»¸ö½×³Ë

1: using System;

2:

3: class Factorial

4: {

5: public static void Main(string[] args)

6: {

7: long nFactorial = 1;

8: long nComputeTo = Int64.Parse(args[0]);

9:

10: long nCurDig = 1;

11: for (nCurDig=1;nCurDig <= nComputeTo; nCurDig++)

12: nFactorial *= nCurDig;

13:

14: Console.WriteLine("{0}! is {1}",nComputeTo, nFactorial);

15: }

16: }

¾¡¹Ü¸ÃÀý×Ó¹ýÓÚÍÏí³£¬µ«Ëü×÷ΪÈçºÎʹÓÃfor Óï¾äµÄÒ»¸ö¿ª¶Ë¡£Ê×ÏÈ£¬ÎÒ±¾Ó¦ÔÚ³õʼ»¯ÄÚ²¿ÉùÃ÷±äÁ¿nCurDig£º

for (long nCurDig=1;nCurDig <= nComputeTo; nCurDig++) nFactorial *= nCurDig;

ÁíÒ»ÖÖºöÂÔ³õʼ»¯µÄÑ¡ÔñÈçÏÂÐУ¬ÒòΪµÚ10ÐÐÔÚfor Óï¾äµÄÍⲿ³õʼ»¯Á˱äÁ¿¡££¨¼ÇסC#ÐèÒª³õʼ»¯±äÁ¿£©£º

for (;nCurDig <= nComputeTo; nCurDig++) nFactorial *= nCurDig;

ÁíÒ»Öֱ仯ÊǰÑ++²Ù×÷·ûÒÆµ½ÄÚº¬Óï¾äÖУº

for ( ;nCurDig <= nComputeTo; ) nFactorial *= nCurDig++;

Èç¹ûÎÒÒ²Ïë°ÚÍÑÌõ¼þÓï¾ä£¬È«²¿Òª×öµÄÊÇÔö¼ÓÒ»Ìõif Óï¾ä£¬ÓÃbreak Óï¾äÖÐֹѭ»·£º

for (;;)

{

if (nCurDig > nComputeTo) break;

nFactorial *= nCurDig++;

}

³ýÁËÓÃÓÚÍ˳öforÓï¾äµÄbreakÓï¾äÍ⣬Ä㻹¿ÉÒÔÓÃcontinue Ìø¹ýµ±Ç°Ñ­»·£¬²¢¼ÌÐøÏÂÒ»´ÎÑ­»·¡£

for (;nCurDig <= nComputeTo;)

{

if (5 == nCurDig) continue; // ÕâÐÐÌø¹ýÁËÓàϵĴúÂë

nFactorial *= nCurDig++;

}

6.2.2 foreach Óï¾ä

ÒѾ­ÔÚVisual Basic ÓïÑÔÖдæÔÚÁ˺ܾõÄÒ»¸ö¹¦ÄÜÊÇ£¬Í¨¹ýʹÓÃFor Each Óï¾äö¾Ù¼¯ºÏ¡£C#ͨ¹ýforeach Óï¾ä£¬Ò²ÓÐÒ»¸öÓÃÀ´Áоټ¯ºÏÖеÄÔªËØµÄÃüÁ

foreach(ÀàÐÍ ±êʶ·û in ±í´ïʽ) ÄÚº¬Óï¾ä

Ñ­»·±äÁ¿ÓÉÀàÐͺͱêʶ·ûÉùÃ÷£¬ÇÒ±í´ïʽÓ뼯ºÏÏà¶ÔÓ¦¡£Ñ­»·±äÁ¿´ú±íÑ­»·ÕýÔÚΪ֮ÔËÐеļ¯ºÏÔªËØ¡£

ÄãÓ¦¸ÃÖªµÀ²»Äܸ³Ò»¸öÐÂÖµ¸øÑ­»·±äÁ¿£¬Ò²²»ÄܰÑËüµ±×÷ref »òout ²ÎÊý´«µÝ¡£ÕâÑùÒýÓÃÔÚÄÚº¬Óï¾äÖб»Ö´ÐеĴúÂë¡£

ÄãÈçºÎÇø±ðijЩÀàÊÇ·ñÖ§³Öforeach Óï¾ä£¿ ¼ò¶øÑÔÖ®£¬Àà±ØÐëÖ§³Ö¾ßÓÐ GetEnumerator()Ãû×ֵķ½·¨£¬¶øÇÒÓÉÆäËù·µ»ØµÄ½á¹¹¡¢Àà»òÕß½Ó¿Ú±ØÐë¾ßÓÐpublic ·½·¨MoveNext() ºÍpublic ÊôÐÔCurrent¡£Èç¹ûÄãÏëÖªµÀ¸ü¶à£¬ÇëÔĶÁÓïÑԲο¼ÊֲᣬËüÓÐºÜ¶à¹ØÓÚÕâ¸ö»°ÌâµÄÏêϸÄÚÈÝ¡£

¶ÔÓÚÇåµ¥ 6.5 ÖеÄÀý×Ó£¬ÎÒËæ±ãÑ¡ÁËÒ»¸öÀ࣬Âú×ãÁËËùÓеÄÕâЩҪÇó¡£ÎÒÓÃËüÀ´Áоٱ»¶¨Òå¹ýµÄËùÓеĻ·¾³±äÁ¿¡£

Çåµ¥ 6.5 ¶ÁËùÓеĻ·¾³±äÁ¿

1: using System;

2: using System.Collections;

3:

4: class EnvironmentDumpApp

5: {

6: public static void Main()

7: {

8: IDictionary envvars = Environment.GetEnvironmentVariables();

9: Console.WriteLine("There are {0} environment variables declared", envvars.Keys.Count);

10: foreach (String strKey in envvars.Keys)

11: {

12: Console.WriteLine("{0} = {1}",strKey, envvars[strKey].ToString());

13: }

14: }

15: }

¶ÔGetEnvironmentVariablesµÄµ÷Ó㨵Ú8ÐУ©·µ»ØÒ»¸öIDictionaryÀàÐͽӿڣ¬ËüÊÇÔÚ.NET¿ò¼ÜÖеÄÐí¶àÀàʵÏÖÁ˵Ä×Öµä½Ó¿Ú¡£Í¨¹ý IDictionary ½Ó¿Ú£¬¿ÉÒÔ·ÃÎÊÁ½¸ö¼¯ºÏ£ºKeys ºÍ Values¡£ÔÚÕâ¸öÀý×ÓÀÎÒÔÚforeachÓï¾äÖÐʹÓÃKeys£¬½Ó×ŲéÕÒ»ùÓÚµ±Ç°keyÖµµÄÖµ£¨µÚ12ÐУ©¡£

µ±Ê¹ÓÃforeachʱ£¬Ö»Òª×¢ÒâÒ»¸öÎÊÌ⣺µ±È·¶¨Ñ­»·±äÁ¿µÄÀàÐÍʱ£¬Ó¦¸Ã¸ñÍâСÐÄ¡£Ñ¡Ôñ´íÎóµÄÀàÐͲ¢Ã»ÓÐÊܵ½±àÒëÆ÷µÄ¼ì²â£¬µ«Ëü»áÔÚÔËÐÐʱÊܼì²â£¬ÇÒ»áÒý·¢Ò»¸öÒì³£¡£

6.2.3 while Óï¾ä

µ±ÄãÏëÖ´ÐÐÒ»¸öÄÚº¬Óï¾ä0´Î»ò¸ü¶à´Îʱ£¬whileÓï¾äÕýÊÇÄãËùÅÎÍûµÄ£º

while (Ìõ¼þ) ÄÚº¬Óï¾ä

Ìõ¼þÓï¾ä¡ª¡ªËüÒ²ÊÇÒ»¸ö²¼¶û±í´ïʽ ¡ª¡ª¿ØÖÆÄÚº¬Óï¾ä±»Ö´ÐеĴÎÊý¡£Äã¿ÉÒÔʹÓà break ºÍcontinueÓï¾äÀ´¿ØÖÆwhileÓï¾äÖеÄÖ´ÐÐÓï¾ä£¬ËüµÄÔËÐз½Ê½Í¬ÔÚforÓï¾äÖеÄÍêÈ«Ïàͬ¡£

ΪÁ˾ÙÀýwhileµÄÓ÷¨£¬Çåµ¥ 6.6 ˵Ã÷ÈçºÎʹÓÃÒ»¸ö StreamReaderÀàÊä³öC#Ô´Îļþµ½ÆÁÄ»¡£

Çåµ¥ 6.6 ÏÔʾһ¸öÎļþµÄÄÚÈÝ

1: using System;

2: using System.IO;

3:

4: class WhileDemoApp

5: {

6: public static void Main()

7: {

8: StreamReader sr = File.OpenText ("whilesample.cs");

9: String strLine = null;

10:

11: while (null != (strLine = sr.ReadLine()))

12: {

13: Console.WriteLine(strLine);

14: }

15:

16: sr.Close();

17: }

18: }

´úÂë´ò¿ªÎļþ whilesample.cs, ½Ó×ŵ±ReadLine ·½·¨·µ»ØÒ»¸ö²»µÈÓÚnullµÄֵʱ£¬¾ÍÔÚÆÁÄ»ÉÏÏÔʾËù¶ÁÈ¡µÄÖµ¡£×¢Ò⣬ÎÒÔÚwhileÌõ¼þÓï¾äÖÐÓõ½Ò»¸ö¸³Öµ¡£Èç¹ûÓиü¶àµÄÓÃ&&ºÍ||Á¬½ÓÆðÀ´µÄÌõ¼þÓï¾ä£¬ÎÒ²»Äܱ£Ö¤ËüÃÇÊÇ·ñ»á±»Ö´ÐУ¬ÒòΪ´æÔÚ×Å¡°¶Ì·¡±µÄ¿ÉÄÜ¡£

6.2.4 do Óï¾ä

C#×îºó¿ÉʹÓõÄÑ­»·Óï¾äÊÇdoÓï¾ä¡£ËüÓëwhileÓï¾äÊ®·ÖÏàËÆ£¬½öµ±¾­¹ý×î³õµÄÑ­»·Ö®ºó£¬Ìõ¼þ²Å±»ÑéÖ¤¡£

do

{

ÄÚº¬Óï¾ä

}

while (Ìõ¼þ);

doÓï¾ä±£Ö¤ÄÚº¬Óï¾äÖÁÉÙ±»Ö´ÐйýÒ»´Î£¬¶øÇÒÖ»ÒªÌõ¼þÇóÖµµÈÓÚÕæ£¬ËüÃǼÌÐø±»Ö´ÐС£Í¨¹ýʹÓÃbreakÓï¾ä£¬Äã¿ÉÒÔÆÈʹÔËÐÐÍ˳ö do Óï¿é¡£Èç¹ûÄãÏëÌø¹ýÕâÒ»´ÎÑ­»·£¬Ê¹ÓÃcontinueÓï¾ä¡£

Ò»¸öÈçºÎʹÓÃdoÓï¾äµÄÀý×ÓÏÔʾÔÚÇåµ¥ 6.7ÖС£ËüÏòÓû§ÇëÇóÒ»¸ö»ò¶à¸öÊý×Ö£¬²¢ÇÒµ±Ö´ÐгÌÐòÍ˳ödoÑ­»·ºó¼ÆËãÆ½¾ùÖµ¡£

Çåµ¥ 6.7 ÔÚdo Ñ­»·ÖмÆËãÆ½¾ùÖµ

1: using System;

2:

3: class ComputeAverageApp

4: {

5: public static void Main()

6: {

7: ComputeAverageApp theApp = new ComputeAverageApp();

8: theApp.Run();

9: }

10:

11: public void Run()

12: {

13: double dValue = 0;

14: double dSum = 0;

15: int nNoOfValues = 0;

16: char chContinue = 'y';

17: string strInput;

18:

19: do

20: {

21: Console.Write("Enter a value: ");

22: strInput = Console.ReadLine();

23: dValue = Double.Parse(strInput);

24: dSum += dValue;

25: nNoOfValues++;

26: Console.Write("Read another value?");

27:

28: strInput = Console.ReadLine();

29: chContinue = Char.FromString(strInput);

30: }

31: while ('y' == chContinue);

32:

33: Console.WriteLine("The average is {0}",dSum / nNoOfValues);

34: }

35: }

ÔÚÕâ¸öÀý×ÓÀÎÒÔÚstatic Mainº¯ÊýÖÐʵÀý»¯ ComputeAverageAppÀàÐ͵ÄÒ»¸ö¶ÔÏó¡£ËüͬÑù½Ó×ŵ÷ÓÃʵÀýµÄRun·½·¨£¬¸Ã·½·¨°üº¬Á˼ÆËãÆ½¾ùÖµËùÓбØÒªµÄ¹¦ÄÜ¡£

do Ñ­»·¿çÔ½µÚ19~31ÐС£Ìõ¼þÊÇÕâÑùÉ趨µÄ£º·Ö±ð»Ø´ðÿһ´ÎÌáÎÊÊÇ·ñΪ¡¯y¡¯£¬ÒÔ¾ö¶¨ÊÇ·ñÒªÔö¼ÓÁíÒ»¸öÖµ¡£ÊäÈëÈÎºÎÆäËü×Ö·û»áÒýÆð³ÌÐòÍ˳ö doÓï¿é£¬ÇÒÆ½¾ùÖµ±»¼ÆËã¡£

ÕýÈçÄã¿ÉÒÔ´ÓÌáµ½µÄÀý×Ó¿´³ö£¬doÓï¾äºÍwhileÓï¾ä²î±ð²»Ì«´ó¡ª¡ª½öÓеIJî±ð¾ÍÊÇÌõ¼þÔÚʲôʱºò±»ÇóÖµ¡£

6.3 С½á

ÕâÕ½âÊÍÁËÈçºÎʹÓÃC#ÖÐÓõ½µÄ¸÷ÖÖÑ¡ÔñºÍÑ­»·Óï¾ä¡£ if Óï¾äÔÚÓ¦ÓóÌÐòÖпÉÄÜÊÇ×îΪ³£ÓõÄÓï¾ä¡£µ±ÔÚ²¼¶û±í´ïʽÖÐʹÓüÆËãʱ£¬±àÒëÆ÷»áΪÄãÁôÒâ¡£µ«ÊÇ£¬ÄãÒ»¶¨ÒªÈ·±£Ìõ¼þÓï¾äµÄ¡°¶Ì·¡±²»»áºöÂÔ±ØÒª´úÂëµÄÔËÐС£

switch Óï¾ä¡ª¡ª¾¡¹ÜͬÑùÓëCÓïÑÔµÄÏàÓ¦²¿·ÖÏàËÆ¡ª¡ªµ«Ò²±»¸Ä½øÁË¡£Ö±´ï²»ÔÙ±»Ö§³Ö£¬¶øÇÒÄã¿ÉÒÔʹÓÃ×Ö·û´®±êÇ©£¬¶ÔÓÚC³ÌÐòÔ±£¬ÕâÊÇÒ»ÖÖеÄÓ÷¨¡£

ÔÚÕâÒ»ÕµÄ×îºó²¿·Ö£¬ÎÒ˵Ã÷ÈçºÎʹÓÃfor¡¢foreach¡¢whileºÍdoÓï¾ä¡£Óï¾äÍê³É¸÷ÖÖÐèÒª£¬°üÀ¨Ö´Ðй̶¨´ÎÊýµÄÑ­»·¡¢Áоټ¯ºÏÔªËØºÍÖ´ÐлùÓÚijЩÌõ¼þµÄÈÎÒâ´ÎÊýµÄÓï¾ä¡£



µÚÆßÕ Òì³£´¦Àí¡¡¡¡¡¡¡¡»Ø¶¥²¿

ͨÓÃÓïÑÔÔËÐÐʱ£¨CLR£©¾ßÓеÄÒ»¸öºÜ´óµÄÓÅÊÆÎªÒì³£´¦ÀíÊÇ¿çÓïÑÔ±»±ê×¼»¯µÄ¡£Ò»¸öÔÚC#ÖÐËùÒý·¢µÄÒì³£¿ÉÒÔÔÚVisual Basic¿Í»§Öеõ½´¦Àí¡£²»ÔÙÓÐ HRESULTs »òÕß ISupportErrorInfo ½Ó¿Ú¡£

¾¡¹Ü¿çÓïÑÔÒì³£´¦ÀíµÄ¸²¸ÇÃæºÜ¹ã£¬µ«ÕâÒ»ÕÂÍêÈ«¼¯ÖÐÌÖÂÛC#Òì³£´¦Àí¡£ÄãÉÔΪ¸Ä±ä±àÒëÆ÷µÄÒç³ö´¦ÀíÐÐΪ£¬½Ó×ÅÓÐȤµÄÊÂÇé¾Í¿ªÊ¼ÁË£ºÄã´¦ÀíÁ˸ÃÒì³£¡£ÒªÔö¼Ó¸ü¶àµÄÊֶΣ¬ËæºóÒý·¢ÄãËù´´½¨µÄÒì³£¡£

7.1 ¼ì²éºÍ·Ç¼ì²éÓï¾ä(checked and unchecked statements)

µ±ÄãÖ´ÐÐÔËËãʱ£¬ÓпÉÄܻᷢÉú¼ÆËã½á¹û³¬³ö½á¹û±äÁ¿Êý¾ÝÀàÐ͵ÄÓÐЧ·¶Î§¡£ÕâÖÖÇé¿ö±»³ÆÎªÒç³ö£¬ÒÀ¾Ý²»Í¬µÄ±à³ÌÓïÑÔ£¬Ä㽫±»ÒÔijÖÖ·½Ê½Í¨Öª¡ª¡ª»òÕ߸ù±¾¾ÍûÓб»Í¨Öª¡££¨C++³ÌÐòÔ±ÌýÆðÀ´ÊìϤÂ𣿣©

ÄÇô£¬C#ÈçºÎ´¦ÀíÒç³öµÄÄØ£¿ ÒªÕÒ³öÆäĬÈÏÐÐΪ£¬Çë¿´ÎÒÔÚÕâ±¾ÊéÇ°ÃæÌáµ½µÄ½×³ËµÄÀý×Ó¡££¨ÎªÁË·½±ãÆä¼û£¬Ç°ÃæµÄÀý×ÓÔÙ´ÎÔÚÇåµ¥ 7.1 Öиø³ö£©

Çåµ¥ 7.1 ¼ÆËãÒ»¸öÊýµÄ½×³Ë

1: using System;

2:

3: class Factorial

4: {

5: public static void Main(string[] args)

6: {

7: long nFactorial = 1;

8: long nComputeTo = Int64.Parse(args[0]);

9:

10: long nCurDig = 1;

11: for (nCurDig=1;nCurDig <= nComputeTo; nCurDig++)

12: nFactorial *= nCurDig;

13:

14: Console.WriteLine("{0}! is {1}",nComputeTo, nFactorial);

15: }

16: }

µ±ÄãÏóÕâÑùʹÓÃÃüÁîÐÐÖ´ÐгÌÐòʱ

factorial 2000

½á¹ûΪ0£¬Ê²Ã´Ò²Ã»Óз¢Éú¡£Òò´Ë£¬¼Ù¶¨C#ĬĬµØ´¦ÀíÒç³öÇé¿ö¶ø²»Ã÷È·µØ¾¯¸æÄãÊǰ²È«µÄ¡£

ͨ¹ý¶ÔÕû¸öÓ¦ÓóÌÐò£¨¾­±àÒëÆ÷¿ª¹Ø£©»òÔÚÓï¾ä¼¶ÔÊÐíÒç³ö¼ì²é£¬Äã¾Í¿ÉÒԸıäÕâÖÖÐÐΪ¡£ÒÔÏÂÁ½½Ú·Ö±ð½â¾öÒ»ÖÖ·½°¸¡£

7.1.1Òç³ö¼ì²éµÄ±àÒëÆ÷ÉèÖÃ

Èç¹ûÄãÏë¿ØÖÆÕû¸öÓ¦ÓóÌÐòµÄÒç³ö¼ì²é£¬C#±àÒëÆ÷ÉèÖÃÑ¡ÏîÕýÊÇÄãËùÒªÕҵġ£Ä¬Èϵأ¬Òç³ö¼ì²éÊǽûÓõġ£ÒªÃ÷È·µØÇëÇóËü£¬ÔËÐÐÒÔϱàÒëÆ÷ÃüÁ

csc factorial.cs /checked+

ÏÖÔÚµ±ÄãÓÃ2000²ÎÊýÖ´ÐÐÓ¦ÓóÌÐòʱ£¬CLR֪ͨÄãÒç³öÒì³££¨¼ûͼ 7.1£©¡£

ͼ 7.1¡¡ÔÊÐíÁËÒç³öÒì³££¬½×³Ë´úÂë²úÉúÁËÒ»¸öÒì³£¡£

 

¡¡¡¡°´È·¶¨¼üÀ뿪¶Ô»°¿ò³öÏÖÁËÒì³£ÐÅÏ¢£º

Exception occurred: System.OverflowException

at Factorial.Main(System.String[])

¡¡¡¡ÏÖÔÚÄãÁ˽âÁËÒç³öÌõ¼þÒý·¢ÁËÒ»¸ö System.OverflowExceptionÒì³£¡£ÏÂÒ»½Ú£¬ÔÚÎÒÃÇÍê³ÉÓï·¨¼ì²éÖ®ºó£¬ÈçºÎ²¶»ñ²¢´¦ÀíËù³öÏÖµÄÒì³££¿

7.1.2¡¡Óï·¨Òç³ö¼ì²é

¡¡¡¡Èç¹ûÄã²»Ïë¶ÔÕû¸öÓ¦ÓóÌÐò½øÐÐÒç³ö¼ì²é£¬ÄÇôֻÔÊÐí¶ÔijЩ´úÂë¶Î½øÐмì²é±ã¿É£¬ÕâÑù¿ÉÄÜ»áºÜ˳³©¡£ÔÚÕâÖÖ³¡ºÏÏ£¬Äã¿ÉÄÜÏóÇåµ¥7.2ÖÐÏÔʾµÄÄÇÑùʹÓüì²éÓï¾ä¡£

Çåµ¥ 7.2¡¡¡¡½×³Ë¼ÆËãÖеÄÒç³ö¼ì²é

1: using System;

2:

3: class Factorial

4: {

5: public static void Main(string[] args)

6: {

7: long nFactorial = 1;

8: long nComputeTo = Int64.Parse(args[0]);

9:

10: long nCurDig = 1;

11:

12: for (nCurDig=1;nCurDig <= nComputeTo; nCurDig++)

13: checked { nFactorial *= nCurDig; }

14:

15: Console.WriteLine("{0}! is {1}",nComputeTo, nFactorial);

16: }

17: }

¡¡¡¡×ÝʹÄãÔËÓñêÖ¾ checked- ±àÒëÁ˸ôúÂ룬ÔÚµÚ13ÐÐÖУ¬Òç³ö¼ì²éÈÔÈ»»á¶Ô³Ë·¨ÊµÊ©¼ì²é£¬ÒòΪchecked Óï¾äÒѾ­À¨×¡ÁËËü¡£½«»á³öÏÖÏàͬµÄ´íÎóÐÅÏ¢¡£

¡¡¡¡ÏÔʾÏà·´ÐÐΪµÄÓï¾äÊÇunchecked ¡£ÉõÖÁÈç¹ûÔÊÐíÁËÒç³ö¼ì²é£¨¸ø±àÒëÆ÷¼ÓÉÏchecked+±êÖ¾£©£¬±»unchecked Óï¾äËùÀ¨×¡µÄ´úÂëÒ²½«²»»áÒý·¢Òç³öÒì³££º

unchecked

{

nFactorial *= nCurDig;

}

7.2 ¡¡Òì³£´¦ÀíÓï¾ä

¡¡¡¡¼ÈÈ»ÄãÖªµÀÁËÈçºÎ²úÉúÒ»¸öÒì³££¨Äã»á·¢ÏÖ¸ü¶àµÄ·½·¨£¬ÏàÐÅÎÒ£©£¬ÈÔÈ»´æÔÚÈçºÎ´¦ÀíËüµÄÎÊÌâ¡£Èç¹ûÄãÊÇÒ»¸ö C++ WIN32 ³ÌÐòÔ±£¬¿Ï¶¨ÊìϤSEH£¨½á¹¹Òì³£´¦Àí£©¡£ÁîÈ˸е½ÐÀοµÄÊÇ£¬£Ã££ÖеÄÃüÁºõÊÇÏàͬµÄ£¬¶øÇÒËüÃÇÒ²ÒÔÏàËÆµÄ·½Ê½ÔË×÷¡£

ÒÔÏÂÈý½Ú½éÉÜÁˣ㣵ÄÒì³£´¦ÀíÓï¾ä£º

¡£Óà try-catch ²¶»ñÒì³£

¡£ÓÃtry-finally Çå³ýÒì³£

¡£ÓÃtry-catch-finally ´¦ÀíËùÓеÄÒì³£

7.2.1 ¡¡Ê¹Óà try ºÍ catch²¶»ñÒì³£

¡¡¡¡Äã¿Ï¶¨»á¶ÔÒ»¼þÊ·dz£¸ÐÐËȤ¡ª¡ª²»Òª¸øÓû§ÌáʾÄÇЩÁîÈËÌÖÑáµÄÒì³£ÏûÏ¢£¬ÒÔ±ãÄãµÄÓ¦ÓóÌÐò¼ÌÐøÖ´ÐС£ÒªÕâÑù£¬Äã±ØÐë²¶»ñ£¨´¦Àí£©¸ÃÒì³£¡£

ÒªÓõ½µÄÓï¾äÊÇtry ºÍ catch¡£try°üº¬¿ÉÄÜ»á²úÉúÒì³£µÄÓï¾ä£¬¶øcatch´¦ÀíÒ»¸öÒì³££¬Èç¹ûÓÐÒì³£´æÔڵϰ¡£Çåµ¥7.3 ÓÃtry ºÍ catchΪOverflowException ʵÏÖÒì³£´¦Àí¡£

Çåµ¥7.3 ²¶»ñÓÉ Factorial CalculationÒý·¢µÄOverflowException Òì³£

1: using System;

2:

3: class Factorial

4: {

5: public static void Main(string[] args)

6: {

7: long nFactorial = 1, nCurDig=1;

8: long nComputeTo = Int64.Parse(args[0]);

9:

10: try

11: {

12: checked

13: {

14: for (;nCurDig <= nComputeTo; nCurDig++)

15: nFactorial *= nCurDig;

16: }

17: }

18: catch (OverflowException oe)

19: {

20: Console.WriteLine("Computing {0} caused an overflow exception", nComputeTo);

21: return;

22: }

23:

24: Console.WriteLine("{0}! is {1}",nComputeTo, nFactorial);

25: }

26: }

ΪÁË˵Ã÷Çå³þ£¬ÎÒÀ©Õ¹ÁËijЩ´úÂë¶Î£¬¶øÇÒÎÒÒ²±£Ö¤Òì³£ÊÇÓÉchecked Óï¾ä²úÉúµÄ£¬ÉõÖÁµ±ÄãÍü¼ÇÁ˱àÒëÆ÷ÉèÖÃʱ¡£

ÕýÈçÄãËù¼û£¬Òì³£´¦Àí²¢²»Âé·³¡£ÄãËùÓÐÒª×öµÄÊÇ£ºÔÚtryÓï¾äÖаüº¬ÈÝÒײúÉúÒì³£µÄ´úÂ룬½Ó×Ų¶»ñÒì³££¬¸ÃÒì³£ÔÚÕâ¸öÀý×ÓÖÐÊÇOverflowExceptionÀàÐÍ¡£ÎÞÂÛÒ»¸öÒ쳣ʲôʱºò±»Òý·¢£¬ÔÚcatch¶ÎÀïµÄ´úÂë»á×¢Òâ½øÐÐÊʵ±µÄ´¦Àí¡£

Èç¹ûÄã²»ÊÂÏÈÖªµÀÄÄÒ»ÖÖÒì³£»á±»Ô¤ÆÚ£¬¶øÈÔÈ»Ïë´¦ÓÚ°²È«×´Ì¬£¬¼òµ¥µØºöÂÔÒì³£µÄÀàÐÍ¡£

try

{

...

}

catch

{

...

}

µ«ÊÇ£¬Í¨¹ýÕâ¸ö;¾¶£¬Äã²»ÄÜ»ñµÃ¶ÔÒì³£¶ÔÏóµÄ·ÃÎÊ£¬¶ø¸Ã¶ÔÏóº¬ÓÐÖØÒªµÄ³ö´íÐÅÏ¢¡£Ò»°ã»¯Òì³£´¦Àí´úÂëÏóÕâÑù£º

try

{

...

}

catch(System.Exception e)

{

...

}

×¢Ò⣬Äã²»ÄÜÓà ref »ò out ÐÞÊηû´«µÝ e ¶ÔÏó¸øÒ»¸ö·½·¨£¬Ò²²»Äܸ³ÓÚËüÒ»¸ö²»Í¬µÄÖµ¡£

7.2.2 ʹÓà try ºÍ finally Çå³ýÒì³£

Èç¹ûÄã¸ü¹ØÐÄÇå³ý¶ø²»ÊÇ´íÎó´¦Àí£¬ try ºÍ finally »á»ñµÃÄãµÄϲ»¶¡£¾¡¹ÜËü²¢Ã»ÓÐÒÖÖÆ³ö´íÐÅÏ¢£¬µ«°üº¬ÔÚ finally ¿éÖеĴúÂëÔÚÒì³£±»Òý·¢ºóÈÔÈ»»á±»Ö´ÐС£

¾¡¹Ü³ÌÐò²»Õý³£ÖÕÖ¹£¬µ«Ä㻹¿ÉÒÔ¸øÓû§ÌṩһÌõÏûÏ¢£¬ÈçÇåµ¥ 7.4 Ëùʾ¡£

Çåµ¥ 7.4 ÔÚfinally Óï¾äÖд¦ÀíÒì³£

1: using System;

2:

3: class Factorial

4: {

5: public static void Main(string[] args)

6: {

7: long nFactorial = 1, nCurDig=1;

8: long nComputeTo = Int64.Parse(args[0]);

9: bool bAllFine = false;

10:

11: try

12: {

13: checked

14: {

15: for (;nCurDig <= nComputeTo; nCurDig++)

16: nFactorial *= nCurDig;

17: }

18: bAllFine = true;

19: }

20: finally

21: {

22: if (!bAllFine)

23: Console.WriteLine("Computing {0} caused an overflow exception", nComputeTo);

24: else

25: Console.WriteLine("{0}! is {1}",nComputeTo, nFactorial);

26: }

27: }

28: }

ͨ¹ý²âÊԸôúÂ룬Äã¿ÉÄÜ»á²Âµ½£¬¼´Ê¹Ã»ÓÐÒý·¢Òì³£´¦Àí£¬finallyÒ²»á±»Ö´ÐС£ÕâÊÇÕæµÄ¡ª¡ªÔÚfinallyÖеĴúÂë×ÜÊǻᱻִÐе쬲»¹ÜÊÇ·ñ¾ßÓÐÒì³£Ìõ¼þ¡£ÎªÁ˾ÙÀý˵Ã÷ÈçºÎÔÚÁ½ÖÖÇé¿öÏÂÌṩһЩÓÐÒâÒåµÄÐÅÏ¢¸øÓû§£¬ ÎÒÒý½øÁËбäÁ¿bAllFine¡£bAllFine¸æËßfinally Óï¿é£¬ËüÊÇ·ñÒòΪһ¸öÒì³£»òÕß½öÊÇÒòΪ¼ÆËãµÄ˳ÀûÍê³É¶ø±»µ÷Óá£

×÷Ϊһ¸öϰ¹ßÁËSEH³ÌÐòÔ±£¬Äã¿ÉÄÜ»áÏ룬ÊÇ·ñÓÐÒ»¸öÓëC++ÖкܹÜÓõÄ__leave Óï¾äµÈ¼ÛµÄÓï¾ä¡£Èç¹ûÄ㻹²»Á˽⣬ÕâÀï˵Ã÷һϣºÔÚC++ÖеÄ__leave Óï¾äÊÇÓÃÀ´ÌáǰÖÕÖ¹ try Óï¶ÎÖеÄÖ´ÐдúÂ룬²¢Á¢¼´Ìø×ªµ½finally Óï¶Î ¡£

»µÏûÏ¢£¡ C# Öв¢Ã»ÓÐ__leave Óï¾ä¡£µ«ÊÇ£¬ÔÚÇåµ¥ 7.5 ÖеĴúÂëÑÝʾÁËÒ»¸öÄã¿ÉÒÔʵÏֵķ½°¸¡£

Çåµ¥ 7.5 ´Ó tryÓï¾ä Ìø×ªµ½finally Óï¾ä

1: using System;

2:

3: class JumpTest

4: {

5: public static void Main()

6: {

7: try

8: {

9: Console.WriteLine("try");

10: goto __leave;

11: }

12: finally

13: {

14: Console.WriteLine("finally");

15: }

16:

17: __leave:

18: Console.WriteLine("__leave");

19: }

20: }

µ±Õâ¸öÓ¦ÓóÌÐòÔËÐÐʱ£¬Êä³ö½á¹ûΪ

try

finally

__leave

Ò»¸ö goto Óï¾ä²»ÄÜÍ˳ö Ò»¸öfinally Óï¿é¡£ÉõÖÁ°Ñ goto Óï¾ä·ÅÔÚ try Óï¾ä¿éÖУ¬»¹ÊÇ»áÁ¢¼´·µ»Ø¿ØÖƵ½ finally Óï¿é¡£Òò´Ë£¬goto Ö»ÊÇÀ뿪ÁË try Óï¿é²¢Ìø×ªµ½finally Óï¿é¡£Ö±µ½ finally ÖеĴúÂëÍê³ÉÔËÐк󣬲ÅÄܵ½´ï__leave ±êÇ©¡£°´ÕâÖÖ·½Ê½£¬Äã¿ÉÒÔÄ£·ÂÔÚSEHÖÐʹÓõĵÄ__leave Óï¾ä¡£

˳±ãµØ£¬Äã¿ÉÄÜ»³ÒÉgoto Óï¾ä±»ºöÂÔÁË£¬ÒòΪËüÊÇtry Óï¾äÖеÄ×îºóÒ»ÌõÓï¾ä£¬²¢ÇÒ¿ØÖÆ×Ô¶¯µØ×ªÒƵ½ÁË finally ¡£ÎªÁËÖ¤Ã÷²»ÊÇÕâÑù£¬ÊÔ°Ñgoto Óï¾ä·Åµ½Console.WriteLine ·½·¨µ÷ÓÃ֮ǰ¡£¾¡¹ÜÓÉÓÚ´æÔÚ×Ų»¿Éµ½´ï´úÂ룬ʹÄãµÃµ½Á˱àÒëÆ÷µÄ¾¯¸æ£¬µ«ÊÇÄ㽫¿´µ½gotoÓï¾äʵ¼ÊÉϱ»Ö´ÐÐÁË£¬¶øÃ»ÓвúÉú¡°try¡±×Ö·û´®µÄÊä³ö¡£

7.2.3 ʹÓÃtry-catch-finally´¦ÀíËùÓÐÒì³£

Ó¦ÓóÌÐò×îÓпÉÄܵÄ;¾¶ÊǺϲ¢Ç°ÃæÁ½ÖÖ´íÎó´¦Àí¼¼Êõ¡ª¡ª²¶»ñ´íÎó¡¢Çå³ý²¢¼ÌÐøÖ´ÐÐÓ¦ÓóÌÐò¡£ËùÓÐÄãÒª×öµÄÊÇÔÚ³ö´í´¦Àí´úÂëÖÐʹÓà try ¡¢catch ºÍ finallyÓï¾ä¡£Çåµ¥ 7.6 ÏÔʾÁË´¦ÀíÁã³ý´íÎóµÄ;¾¶¡£

Çåµ¥ 7.6 ʵÏÖ¶à¸öcatch Óï¾ä

1: using System;

2:

3: class CatchIT

4: {

5: public static void Main()

6: {

7: try

8: {

9: int nTheZero = 0;

10: int nResult = 10 / nTheZero;

11: }

12: catch(DivideByZeroException divEx)

13: {

14: Console.WriteLine("divide by zero occurred!");

15: }

16: catch(Exception Ex)

17: {

18: Console.WriteLine("some other exception");

19: }

20: finally

21: {

22: }

23: }

24: }

Õâ¸öÀý×ӵļ¼ÇÉΪ£¬Ëü°üº¬Á˶à¸öcatch Óï¾ä¡£µÚÒ»¸ö²¶»ñÁ˸ü¿ÉÄܳöÏÖµÄDivideByZeroExceptionÒì³££¬¶øµÚ¶þ¸öcatchÓï¾äͨ¹ý²¶»ñÆÕͨÒì³£´¦ÀíÁËËùÓÐÊ£ÏÂÀ´µÄÒì³£¡£

Äã¿Ï¶¨×ÜÊÇÊ×ÏȲ¶»ñÌØ¶¨µÄÒì³££¬½Ó×ÅÊÇÆÕͨµÄÒì³£¡£Èç¹ûÄã²»°´Õâ¸ö˳Ðò²¶»ñÒì³££¬»á·¢ÉúʲôÊÂÄØ£¿Çåµ¥7.7ÖеĴúÂëÓÐ˵Ã÷¡£

Çåµ¥7.7 ˳Ðò²»Ê