ÒýÑÔ
ÎÒÃÇÖªµÀ£¬ÔÚC++ÁìÓò£¬×÷Ϊ½ø½×ÔĶÁ²ÄÁÏ£¬±Ø¿´µÄÊéÊÇ¡¶Effective C++¡·¡£ ¶ø¡¶Effective
C#¡·Ö®ÓÚC# £¬ÊÇÀàËÆ¡¶Effective C++¡·Ö®ÓÚC++Ò»ÑùµÄ´æÔÚ¡£
ÕâÆªÎÄÕ£¬½«¡¶Effective C# Second Edition¡·Ò»ÊéÖÐÊÊÓÃÓÚUnityÓÎÏ·ÒýÇæÀïʹÓÃC#µÄ¾Ñé̸֮½øÐÐÁËÌáÁ¶£¬×ܽá³ÉΪ22Ìõ×¼Ôò£¬¹©¸÷λ¿ìËÙµØÕÆÎÕÕâ±¾ÊéµÄ֪ʶ¹£¸Å£¬ÔÚUnityÖÐд³ö¸ü¸ßÖÊÁ¿µÄC#´úÂë¡£

¡¶Effective C# Second Edition¡·Ò»ÊéÔ±¾ÓÐ50ÌõÔÔò£¬µ«Õâ50ÌõÔÔòÊÇÕë¶ÔC#ÓïÑÔ±¾ÉíÒÔ¼°.NetÀ´Ð´µÄ£¬ÎÒÔÚÔĶÁ¹ý³ÌÖУ¬·¢ÏÖÊÇÓÐЩÔÔò²¢²»ÊÊÓÃÓÚUnityÖÐmono°æ±¾µÄC#µÄʹÓá£ÓÚÊÇ£¬ÔÚ½øÐжÁÊé±Ê¼Ç×ܽáµÄʱºò£¬½«²»ÊÊÓõÄÔÔòÂÔÈ¥£¬Í¬Ê±½«ÊÊÓõÄÔÔò½øÐÐÌáÁ¶£¬×ܽá³ö22£¨ºóÀ´·¢ÏÖµÚ22ÌõÒ²ÊÇ.NETµÄÌØÐÔ£¬Unity°æ±¾µÄmono²¢Ã»ÓÐʵÏÖ£¬ËùÒÔÑϸñÒâÒåÉÏÀ´ËµÊÇ21Ìõ£©Ìõ£¬¹¹³É±¾ÎĵÄÄÚÈÝ¡£
ÐèҪעÒ⣬ÒòΪÊÇÌô³öÁËÊéÖÐÊÊÓõÄ×¼Ôò£¬µ¼ÖÂ×¼ÔòÐòºÅÓÐÐ©ÌøÔ¾£¬ÎªÁËÔĶÁ·½±ã£¬±¾ÎĶÔÕâЩÐòºÅ½øÐÐÁËÖØÐÂÅÅÁС£ÖØÅź󣬱êÌâÖÐÓëÊéÖÐÐòºÅ²»Ò»ÑùµÄ×¼Ôò£¬¶¼ÔÚ¸ÃÔÔò×ܽáµÄĩβעÃ÷Á˶ÔÓ¦µÄÔÊéÐòºÅ¡£
ͬÑùµØ£¬×÷Ϊ×ܽáʽÎÄÕ£¬ËùÒÔÿһÌõµÄÄÚÈݶ¼¸ß¶È¸ÅÀ¨£¬Ò²ÐíÀí½âÆÂ¶È±È½Ï¶¸£¬ÈôÓжÁµ½²»Ì«Àí½âµÄµØ·½£¬½¨Òé´ó¼ÒÈ¥ÔĶÁÔÊ飬ӢÎİæºÍÖÐÎİæ¾ù¿É£¬¿´¿´ÔÊéÖÐÌṩµÄ¸÷ÖÖ´úÂëÓëʾÀý£¬ÕâÑùÕÆÎÕÆðÀ´¾Í»áʰ빦±¶¡£
±¾ÎÄÄÚÈÝ˼άµ¼Í¼Ê½×ܽá
ÒÔÏÂÊDZ¾ÎÄÄÚÈÝ£¬Ìá¸ßUnityÖÐC#´úÂëÖÊÁ¿µÄ22Ìõ×¼ÔòµÄ×ܽáʽ˼άµ¼Í¼£º

ÔÔò1£º¾¡¿ÉÄܵØÊ¹ÓÃÊôÐÔ£¬¶ø²»ÊÇ¿ÉÖ±½Ó·ÃÎʵÄÊý¾Ý³ÉÔ±
ÊôÐÔ(property)Ò»Ö±ÊÇC#ÓïÑÔÖбȽÏÓÐÌØµãµÄ´æÔÚ¡£ÊôÐÔÔÊÐí½«Êý¾Ý³ÉÔ±×÷Ϊ¹²ÓнӿڵÄÒ»²¿·Ö±©Â¶³öÈ¥£¬Í¬Ê±ÈÔ¾ÉÌá¹©ÃæÏò¶ÔÏó»·¾³ÏÂËùÐèµÄ·â×°¡£ÊôÐÔÕâ¸öÓïÑÔÔªËØ¿ÉÒÔÈÃÄãÏñ·ÃÎÊÊý¾Ý³ÉÔ±Ò»ÑùʹÓ㬵«Æäµ×²ãÒÀ¾ÉÊÇʹÓ÷½·¨ÊµÏֵġ£
ʹÓÃÊôÐÔ£¬¿ÉÒԷdz£ÇáËɵÄÔÚgetºÍset´úÂë¶ÎÖмÓÈë¼ì²é»úÖÆ¡£
ÐèҪעÒ⣬ÕýÒòΪÊôÐÔÊÇÓ÷½·¨ÊµÏֵģ¬ËùÒÔËüÓµÓз½·¨ËùÓµÓеÄÒ»ÇÐÓïÑÔÌØÐÔ£º
1£©ÊôÐÔÔö¼Ó¶àÏ̵߳ÄÖ§³ÖÊǷdz£·½±ãµÄ¡£Äã¿ÉÒÔ¼ÓÇ¿ get ºÍ set ·ÃÎÊÆ÷£¨accessors£©µÄʵÏÖÀ´ÌṩÊý¾Ý·ÃÎʵÄͬ²½¡£
2£©ÊôÐÔ¿ÉÒÔ±»¶¨ÒåΪvirtual¡£
3£©¿ÉÒÔ°ÑÊôÐÔÀ©Õ¹Îªabstract¡£
4£©¿ÉÒÔʹÓ÷ºÐͰ汾µÄÊôÐÔÀàÐÍ¡£
5£©ÊôÐÔÒ²¿ÉÒÔ¶¨ÒåΪ½Ó¿Ú¡£
6£©ÒòΪʵÏÖÊôÐÔ·ÃÎʵķ½·¨getÓësetÊǶÀÁ¢µÄÁ½¸ö·½·¨£¬ÔÚC# 2.0Ö®ºó£¬Äã¿ÉÒÔ¸øËüÃǶ¨Ò岻ͬµÄ·ÃÎÊȨÏÞ£¬À´¸üºÃµÄ¿ØÖÆÀà³ÉÔ±µÄ¿É¼ûÐÔ¡£
7£©ÎªÁ˺ͶàάÊý×é±£³ÖÒ»Ö£¬ÎÒÃÇ¿ÉÒÔ´´½¨¶àάË÷ÒýÆ÷£¬ÔÚ²»Í¬µÄά¶ÈÉÏʹÓÃÏàͬ»ò²»Í¬ÀàÐÍ¡£
ÎÞÂÛºÎʱ£¬ÐèÒªÔÚÀàÐ͵Ĺ«Óлò±£»¤½Ó¿ÚÖб©Â¶Êý¾Ý£¬¶¼Ó¦¸ÃʹÓÃÊôÐÔ¡£Èç¹û¿ÉÒÔÒ²Ó¦¸ÃʹÓÃË÷ÒýÆ÷À´±©Â¶ÐòÁлò×ֵ䡣ÏÖÔÚ¶àͶÈëÒ»µãʱ¼äʹÓÃÊôÐÔ£¬»»À´µÄÊǽñºóά»¤Ê±µÄ¸ü¼ÓÓÎÈÐÓÐÓà¡£
ÔÔò2£ºÆ«ÏòÓÚʹÓÃÔËÐÐʱ³£Á¿¶ø²»ÊDZàÒëʱ³£Á¿
¶ÔÓÚ³£Á¿£¬C#ÀïÓÐÁ½¸ö²»Í¬µÄ°æ±¾£ºÔËÐÐʱ³£Á¿£¨readonly£©ºÍ±àÒëʱ³£Á¿£¨const£©¡£
Ó¦¸Ã¾¡Á¿Ê¹ÓÃÔËÐÐʱ³£Á¿£¬¶ø²»ÊDZàÒëÆ÷³£Á¿¡£ËäÈ»±àÒëÆ÷³£Á¿ÂԿ죬µ«²¢Ã»ÓÐÔËÐÐʱ³£Á¿ÄÇôÁé»î¡£Ó¦½ö½öÔÚÄÇЩÐÔÄÜÒì³£Ãô¸Ð£¬ÇÒ³£Á¿µÄÖµÔÚ¸÷¸ö°æ±¾Ö®¼ä¾ø¶Ô²»»á±ä»¯Ê±£¬ÔÙʹÓñàÒëʱ³£Á¿¡£
±àÒëʱ³£Á¿ÓëÔËÐÐʱ³£Á¿²»Í¬Ö®´¦±íÏÖÔÚÓÚËûÃǵķÃÎÊ·½Ê½²»Í¬£¬ÒòΪReadonlyÖµÊÇÔËÐÐʱ½âÎöµÄ£º
±àÒëʱ³£Á¿£¨const£©µÄÖµ»á±»Ä¿±ê´úÂëÖеÄÖµÖ±½ÓÈ¡´ú¡£
ÔËÐÐʱ³£Á¿£¨readonly£©µÄÖµÊÇÔÚÔËÐÐʱ½øÐÐÇóÖµ¡£ÒýÓÃÔËÐÐʱÉú³ÉµÄIL½«ÒýÓõ½readonly±äÁ¿£¬¶ø²»ÊDZäÁ¿µÄÖµ¡£
Õâ¸ö²î±ð¾Í´øÀ´ÁËÈçϹæÔò£º
±àÒëʱ³£Á¿£¨const£©½öÄÜÓÃÓÚÊýÖµºÍ×Ö·û´®¡£
ÔËÐÐʱ³£Á¿£¨readonly£©¿ÉÒÔΪÈÎÒâÀàÐÍ¡£ÔËÐÐʱ³£Á¿±ØÐëÔÚ¹¹Ô캯Êý»ò³õʼ»¯Æ÷Öгõʼ»¯£¬ÒòΪÔÚ¹¹Ô캯ÊýÖ´Ðкó²»ÄÜÔÙ±»Ð޸ġ£Äã¿ÉÒÔÈÃij¸öreadonlyֵΪһ¸öDataTime½á¹¹£¬¶ø²»ÄÜÖ¸¶¨Ä³¸öconstΪDataTIme¡£
¿ÉÒÔÓÃreadonlyÖµ±£´æÊµÀý³£Á¿£¬ÎªÀàµÄÿ¸öʵÀý´æ·Å²»Í¬µÄÖµ¡£¶ø±àÒëʱ³£Á¿¾ÍÊǾ²Ì¬µÄ³£Á¿¡£
ÓÐʱºòÄãÐèÒªÈÃij¸öÖµÔÚ±àÒëʱ²ÅÈ·¶¨£¬¾Í×îºÃÊÇʹÓÃÔËÐÐʱ³£Á¿£¨readonly£©¡£
±ê¼Ç°æ±¾ºÅµÄÖµ¾ÍÓ¦¸ÃʹÓÃÔËÐÐʱ³£Á¿£¬ÒòΪËüµÄÖµ»áËæ×Åÿ¸ö²»Í¬°æ±¾µÄ·¢²¼¶ø¸Ä±ä¡£
constÓÅÓÚreadonlyµÄµØ·½½ö½öÊÇÐÔÄÜ£¬Ê¹ÓÃÒÑÖªµÄ³£Á¿ÖµÒª±È·ÃÎÊreadonlyÖµÂÔ¸ßÒ»µã£¬²»¹ýÕâÆäÖеÄЧÂÊÌáÉý£¬¿ÉÒÔ˵ÊÇ΢ºõÆä΢µÄ¡£
×ÛÉÏ£¬ÔÚ±àÒëÆ÷±ØÐëµÃµ½È·¶¨Êýֵʱ£¬Ò»¶¨ÒªÊ¹ÓÃconst¡£ÀýÈçÌØÐÔ£¨attribute£©µÄ²ÎÊýºÍö¾ÙµÄ¶¨Ò壬»¹ÓÐÄÇЩÔÚ¸÷¸ö°æ±¾·¢²¼Ö®¼ä²»»á±ä»¯µÄÖµ¡£³ý´ËÖ®ÍâµÄËùÓÐÇé¿ö£¬¶¼Ó¦¾¡Á¿Ñ¡Ôñ¸ü¼ÓÁé»îµÄreadonly³£Á¿¡£
ÔÔò3£º ÍÆ¼öʹÓÃis »òas²Ù×÷·û¶ø²»ÊÇÇ¿ÖÆÀàÐÍת»»
C#ÖУ¬isºÍas²Ù×÷·ûµÄÓ÷¨¸ÅÀ¨ÈçÏ¡£
is : ¼ì²éÒ»¸ö¶ÔÏóÊÇ·ñ¼æÈÝÓÚÆäËûÖ¸¶¨µÄÀàÐÍ,²¢·µ»ØÒ»¸öBoolÖµ,ÓÀÔ¶²»»áÅ׳öÒì³£¡£
as£º×÷ÓÃÓëÇ¿ÖÆÀàÐÍת»»ÊÇÒ»Ñù,µ«ÊÇÓÀÔ¶²»»áÅ׳öÒì³£,¼´Èç¹ûת»»²»³É¹¦,»á·µ»Ønull¡£
¾¡¿ÉÄܵÄʹÓÃas²Ù×÷·û£¬ÒòΪÏà¶ÔÓÚÇ¿ÖÆÀàÐÍת»»À´Ëµ£¬as¸ü¼Ó°²È«£¬Ò²¸ü¼Ó¸ßЧ¡£
asÔÚת»»Ê§°Üʱ»á·µ»Ønull£¬ÔÚת»»¶ÔÏóÊÇnullʱҲ»á·µ»Ønull£¬ËùÒÔʹÓÃas½øÐÐת»»Ê±£¬Ö»Ðè¼ì²é·µ»ØµÄÒýÓÃÊÇ·ñΪnull¼´¿É¡£
asºÍis²Ù×÷·û¶¼²»»áÖ´ÐÐÈκÎÓû§×Ô¶¨ÒåµÄת»»£¬ËüÃǽöµ±ÔËÐÐʱÀàÐÍ·ûºÏÄ¿±êÀàÐÍʱ²ÅÄÜת»»³É¹¦£¬Ò²²»»áÔÚת»»Ê±´´½¨ÐµĶÔÏó¡£
asÔËËã·û¶ÔÖµÀàÐÍÊÇÎÞЧ£¬´Ëʱ¿ÉÒÔʹÓÃis£¬ÅäºÏÇ¿ÖÆÀàÐÍת»»½øÐÐת»»¡£
½öµ±²»ÄÜʹÓÃas½øÐÐת»»Ê±£¬²ÅÓ¦¸ÃʹÓÃis²Ù×÷·û¡£·ñÔòis¾ÍÊǶàÓàµÄ¡£
ÔÔò4£º ÍÆ¼öʹÓÃÌõ¼þÊôÐÔ¶ø²»ÊÇ#ifÌõ¼þ±àÒë
ÓÉÓÚ#if/#endifºÜÈÝÒ×±»ÀÄÓã¬Ê¹µÃ±àдµÄ´úÂëÄÑÓÚÀí½âÇÒ¸üÄÑÓÚµ÷ÊÔ¡£C#Ϊ´ËÌṩÁËÒ»Ìõ¼þÌØÐÔ(Conditional
attribute)¡£Ê¹ÓÃÌõ¼þÌØÐÔ¿ÉÒÔ½«º¯Êý²ð·Ö³öÀ´£¬ÈÃÆäÖ»ÓÐÔÚ¶¨ÒåÁËijЩ»·¾³±äÁ¿»òÉèÖÃÁËij¸öÖµÖ®ºó²ÅÄܱàÒë²¢³ÉΪÀàµÄÒ»²¿·Ö¡£ConditionalÌØÐÔ×î³£Óõĵط½¾ÍÊǽ«Ò»¶Î´úÂë±ä³Éµ÷ÊÔÓï¾ä¡£
ConditionalÌØÐÔÖ»¿ÉÓ¦ÓÃÔÚÕû¸ö·½·¨ÉÏ£¬ÁíÍ⣬ÈκÎÒ»¸öʹÓÃConditionalÌØÐԵķ½·¨¶¼Ö»ÄÜ·µ»ØvoidÀàÐÍ¡£²»ÄÜÔÙ·½·¨ÄڵĴúÂë¿éÉÏÓ¦ÓÃConditionalÌØÐÔ¡£Ò²²»¿ÉÒÔÔÚÓзµ»ØÖµµÄ·½·¨ÉÏÓ¦ÓÃConditionalÌØÐÔ¡£µ«Ó¦ÓÃÁËConditionalÌØÐԵķ½·¨¿ÉÒÔ½ÓÊÜÈÎÒâÊýÄ¿µÄÒýÓÃÀàÐͲÎÊý¡£
ʹÓÃConditionalÌØÐÔÉú³ÉµÄILÒª±ÈʹÓÃ#if/#Eendifʱ¸üÓÐЧÂÊ¡£Í¬Ê±£¬½«ÆäÏÞÖÆÔÚº¯Êý²ãÃæÉÏ¿ÉÒÔ¸ü¼ÓÇåÎúµØ½«Ìõ¼þÐԵĴúÂë·ÖÀë³öÀ´£¬ÒÔ±ã½øÒ»²½±£Ö¤´úÂëµÄÁ¼ºÃ½á¹¹¡£
ÔÔò5£ºÀí½â¼¸¸öµÈͬÐÔÅжÏÖ®¼äµÄ¹ØÏµ
C#ÖпÉÒÔ´´½¨Á½ÖÖÀàÐÍ£ºÖµÀàÐͺÍÒýÓÃÀàÐÍ¡£Èç¹ûÁ½¸öÒýÓÃÀàÐ͵ıäÁ¿Ö¸ÏòµÄÊÇͬһ¸ö¶ÔÏó£¬ËüÃǽ«±»ÈÏΪÊÇ¡°ÒýÓÃÏàµÈ¡±¡£Èç¹ûÁ½¸öÖµÀàÐ͵ıäÁ¿ÀàÐÍÏàͬ£¬¶øÇÒ°üº¬Í¬ÑùµÄÄÚÈÝ£¬ËüÃDZ»ÈÏΪÊÇ¡°ÖµÏàµÈ¡±¡£ÕâÒ²ÊǵÈͬÐÔÅжÏÐèÒªÈç´Ë¶à·½·¨µÄÔÒò¡£
µ±ÎÒÃÇ´´½¨×Ô¼ºµÄÀàÐÍʱ£¨ÎÞÂÛÊÇÀ໹ÊÇstruct£©£¬Ó¦ÎªÀàÐͶ¨Òå¡°µÈͬÐÔ¡±µÄº¬Òå¡£C#ÌṩÁË4ÖÖ²»Í¬µÄº¯ÊýÀ´ÅжÏÁ½¸ö¶ÔÏóÊÇ·ñ¡°ÏàµÈ¡±¡£
public static bool ReferenceEquals (object left, object
right);ÅжÏÁ½¸ö²»Í¬±äÁ¿µÄ¶ÔÏó±êʶ£¨object identity£©ÊÇ·ñÏàµÈ¡£ÎÞÂ۱ȽϵÄÊÇÒýÓÃÀàÐÍ»¹ÊÇÖµÀàÐÍ£¬¸Ã·½·¨ÅжϵÄÒÀ¾Ý¶¼ÊǶÔÏó±êʶ£¬¶ø²»ÊǶÔÏóÄÚÈÝ¡£
public static bool Equals (object left, object right);
ÓÃÓÚÅжÏÁ½¸ö±äÁ¿µÄÔËÐÐʱÀàÐÍÊÇ·ñÏàµÈ¡£
public virtual bool Equals(object right); ÓÃÓÚÖØÔØ
public static bool operator ==(MyClass left, MyClass
right); ÓÃÓÚÖØÔØ
²»Ó¦¸Ã¸²Ð´Object.referenceEquals£¨£©¾²Ì¬·½·¨ºÍObject.Equals£¨£©¾²Ì¬·½·¨£¬ÒòΪËüÃÇÒѾÍêÃÀµÄÍê³ÉÁËËùÐèÒªÍê³ÉµÄ¹¤×÷£¬ÌṩÁËÕýÈ·µÄÅжϣ¬²¢ÇÒ¸ÃÅжÏÓëÔËÐÐʱµÄ¾ßÌåÀàÐÍÎ޹ء£¶ÔÓÚÖµÀàÐÍ£¬ÎÒÃÇÓ¦¸Ã×ÜÊǸ²Ð´Object.Equals£¨£©ÊµÀý·½·¨ºÍoperatior==(
),ÒÔ±ãΪÆäÌṩЧÂʸü¸ßµÄµÈͬÐÔÅжϡ£¶ÔÓÚÒýÓÃÀàÐÍ£¬½öµ±ÄãÈÏΪÏàµÈµÄº¬Òå²¢·ÇÊǶÔÏó±êʶÏàµÈʱ£¬²ÅÐèÒª¸²Ð´Object.Equals(
)ʵÀý·½·¨¡£ÔÚ¸²Ð´Equals( )ʱҲҪʵÏÖIEquatable<T>¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶EffectiveC# Second Edition¡·ÖÐÔÔò6¡£
ÔÔò6£ºÁ˽âGetHashCode( )µÄһЩ¿Ó
GetHashCode( )·½·¨ÔÚʹÓÃʱ»áÓв»ÉÙ¿Ó£¬Òª½÷É÷ʹÓá£GetHashCode()º¯Êý½ö»áÔÚÒ»¸öµØ·½Óõ½£¬¼´Îª»ùÓÚÉ¢ÁÐ(hash)µÄ¼¯ºÏ¶¨Òå¼üµÄÉ¢ÁÐֵʱ£¬´ËÀ༯ºÏ°üÀ¨HashSet<T>ºÍDictionary<K,V>ÈÝÆ÷µÈ¡£¶ÔÒýÓÃÀàÐÍÀ´½²£¬Ë÷È»¿ÉÒÔÕý³£¹¤×÷£¬µ«ÊÇЧÂʺܵ͡£¶ÔÖµÀàÐÍÀ´½²£¬»ùÀàÖеÄʵÏÖÓÐʱÉõÖÁ²»ÕýÈ·¡£¶øÇÒ£¬±àдµÄ×Ô¼ºGetHashCode(
)Ò²²»¿ÉÄܼÈÓÐЧÂÊÓÖÕýÈ·¡£
ÔÚ.NETÖУ¬Ã¿¸ö¶ÔÏó¶¼ÓÐÒ»¸öÉ¢ÁÐÂ룬ÆäÖµÓÉSystem.Object.GetHashCode()¾ö¶¨¡£
ʵÏÖ×Ô¼ºµÄGetHashCode( )ʱ£¬Òª×ñÑÉÏÊöÈýÌõÔÔò£º
Èç¹ûÁ½¸ö¶ÔÏóÏàµÈ£¨ÓÉoperation==¶¨Ò壩£¬ÄÇôËûÃDZØÐëÉú³ÉÏàͬµÄÉ¢ÁÐÂë¡£·ñÔò£¬ÕâÑùµÄÉ¢ÁÐÂ뽫ÎÞ·¨ÓÃÀ´²éÕÒÈÝÆ÷ÖеĶÔÏó¡£
¶ÔÓÚÈκÎÒ»¸ö¶ÔÏóA£¬A.GetHashCode()±ØÐë±£³Ö²»±ä¡£
¶ÔÓÚËùÓеÄÊäÈ룬ɢÁк¯ÊýÓ¦¸ÃÔÚËùÓÐÕûÊýÖа´Ëæ»ú·Ö±ðÉú³ÉÉ¢ÁÐÂë¡£ÕâÑùÉ¢ÁÐÈÝÆ÷²ÅÄܵõ½×ã¹»µÄЧÂÊÌáÉý¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶EffectiveC# Second Edition¡·ÖÐÔÔò7¡£
ÔÔò7£ºÀí½â¶ÌС·½·¨µÄÓÅÊÆ
½«C#´úÂë·Òë³É¿ÉÖ´ÐеĻúÆ÷ÂëÐèÒªÁ½¸ö²½Öè¡£C#±àÒëÆ÷½«Éú³ÉIL£¬²¢·ÅÔÚ³ÌÐò¼¯ÖС£Ëæºó£¬JIT½«¸ù¾ÝÐèÒªÖðһΪ·½·¨£¨»òÊÇÒ»×é·½·¨£¬Èç¹ûÉæ¼°ÄÚÁª£©Éú³É»úÆ÷Âë¡£¶ÌСµÄ·½·¨ÈÃJIT±àÒëÆ÷Äܹ»¸üºÃµØÆ½Ì¯±àÒëµÄ´ú¼Û¡£¶ÌСµÄ·½·¨Ò²¸üÊʺÏÄÚÁª¡£
³ýÁ˶ÌС֮Í⣬¼ò»¯¿ØÖÆÁ÷³ÌÒ²ºÜÖØÒª¡£¿ØÖÆ·ÖÖ§Ô½ÉÙ£¬JIT±àÒëÆ÷Ò²»áÔ½ÈÝÒ×µØÕÒµ½×îÊʺϷÅÔڼĴæÆ÷ÖеıäÁ¿¡£
ËùÒÔ£¬¶ÌС·½·¨µÄÓÅÊÆ£¬²¢²»½öÌåÏÖÔÚ´úÂëµÄ¿É¶ÁÐÔÉÏ£¬»¹¹ØÏµµ½³ÌÐòÔËÐÐʱµÄЧÂÊ¡£
´ËÔÔò¶ÔÓ¦ÓÚ¡¶EffectiveC# Second Edition¡·ÖÐÔÔò11¡£ ÔÔò8£ºÑ¡Ôñ±äÁ¿³õʼ»¯¶ø²»ÊǸ³ÖµÓï¾ä
³ÉÔ±³õʼ»¯Æ÷ÊDZ£Ö¤ÀàÐÍÖгÉÔ±¾ù±»³õʼ»¯µÄ×î¼òµ¥µÄ·½·¨¡ª¡ªÎÞÂÛµ÷ÓõÄÊÇÄÄÒ»¸ö¹¹Ô캯Êý¡£³õʼ»¯Æ÷½«ÔÚËùÓй¹Ô캯ÊýÖ´ÐÐ֮ǰִÐС£Ê¹ÓÃÕâÖÖÓï·¨Ò²¾Í±£Ö¤ÁËÄã²»»áÔÙÌí¼ÓµÄÐµĹ¹Ô캯ÊýʱÒÅ©µôÖØÒªµÄ³õʼ»¯´úÂë¡£
×ÛÉÏ£¬ÈôÊÇËùÓеĹ¹Ô캯Êý¶¼Òª½«Ä³¸ö³ÉÔ±±äÁ¿³õʼ»¯³Éͬһ¸öÖµ£¬ÄÇôӦ¸ÃʹÓóõʼ»¯Æ÷¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶Effective C# Second Edition¡·ÖÐÔÔò12¡£
ÔÔò9£ºÕýÈ·µØ³õʼ»¯¾²Ì¬³ÉÔ±±äÁ¿
C#ÌṩÁËÓо²Ì¬³õʼ»¯Æ÷ºÍ¾²Ì¬¹¹Ô캯ÊýÀ´×¨ÃÅÓÃÓÚ¾²Ì¬³ÉÔ±±äÁ¿µÄ³õʼ»¯¡£
¾²Ì¬¹¹Ô캯ÊýÊÇÒ»¸öÌØÊâµÄº¯Êý£¬½«ÔÚÆäËûËùÓз½·¨Ö´ÐÐ֮ǰÒÔ¼°±äÁ¿»òÊôÐÔ±»µÚÒ»´Î·ÃÎÊ֮ǰִÐС£¿ÉÒÔÓÃÕâ¸öº¯ÊýÀ´³õʼ»¯¾²Ì¬±äÁ¿£¬ÊµÏÖµ¥Àýģʽ»òÖ´ÐÐÀà¿ÉÓÃ֮ǰ±ØÐë½øÐеÄÈκβÙ×÷¡£
ºÍʵÀý³õʼ»¯Ò»Ñù£¬Ò²¿ÉÒÔʹÓóõʼ»¯Æ÷Óï·¨À´Ìæ´ú¾²Ì¬µÄ¹¹Ô캯Êý¡£ÈôÖ»ÊÇÐèҪΪij¸ö¾²Ì¬³ÉÔ±·ÖÅä¿Õ¼ä£¬ÄÇô²»·ÁʹÓóõʼ»¯Æ÷µÄÓï·¨¡£¶øÈôÊÇÒª¸ü¸´ÔÓһЩµÄÂß¼À´³õʼ»¯¾²Ì¬³ÉÔ±±äÁ¿£¬ÄÇô¿ÉÒÔʹÓþ²Ì¬¹¹Ô캯Êý¡£
ʹÓþ²Ì¬¹¹Ô캯Êý¶ø²»ÊǾ²Ì¬³õʼ»¯Æ÷×î³£¼ûµÄÀíÓɾÍÊÇ´¦ÀíÒì³£¡£ÔÚʹÓþ²Ì¬³õʼ»¯Æ÷ʱ£¬ÎÒÃÇÎÞ·¨×Ô¼º²¶»ñÒì³£¡£¶øÔÚ¾²Ì¬¹¹Ô캯ÊýÖÐÈ´¿ÉÒÔ×öµ½¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶Effective C# Second Edition¡·ÖÐÔÔò13¡£
ÔÔò10£ºÊ¹Óù¹Ô캯ÊýÁ´£¨¼õÉÙÖØ¸´µÄ³õʼ»¯Âß¼£©
±àд¹¹Ô캯ÊýºÜ¶àʱºòÊǸöÖØ¸´ÐÔµÄÀͶ¯£¬Èç¹ûÄã·¢ÏÖ¶à¸ö¹¹Ô캯Êý°üº¬ÏàͬµÄÂß¼£¬¿ÉÒÔ½«Õâ¸öÂß¼ÌáÈ¡µ½Ò»¸öͨÓõĹ¹Ô캯ÊýÖС£ÕâÑù¼È¿ÉÒÔ±ÜÃâ´úÂëÖØ¸´£¬Ò²¿ÉÒÔÀûÓù¹Ô캯Êý³õʼ»¯Æ÷À´Éú³É¸ü¸ßЧµÄÄ¿±ê´úÂë¡£
C#±àÒëÆ÷½«°Ñ¹¹Ô캯Êý³õʼ»¯Æ÷¿´×öÊÇÒ»ÖÖÌØÊâµÄÓï·¨£¬²¢ÒƳýµôÖØ¸´µÄ±äÁ¿³õʼ»¯Æ÷ÒÔ¼°Öظ´µÄ»ùÀ๹Ô캯Êýµ÷Óá£ÕâÑùʹµÃ×îÖյĶÔÏó¿ÉÒÔÖ´ÐÐ×îÉٵĴúÂëÀ´±£Ö¤³õʼ»¯µÄÕýÈ·ÐÔ¡£
¹¹Ô캯Êý³õʼ»¯Æ÷ÔÊÐíÒ»¸ö¹¹Ô캯ÊýÈ¥µ÷ÓÃÁíÒ»¸ö¹¹Ô캯Êý¡£¶øC# 4.0Ìí¼ÓÁ˶ÔĬÈϲÎÊýµÄÖ§³Ö£¬Õâ¸ö¹¦ÄÜÒ²¿ÉÒÔÓÃÀ´¼õÉÙ¹¹Ô캯ÊýÖеÄÖØ¸´´úÂë¡£Äã¿ÉÒÔ½«Ä³¸öÀàµÄËùÓй¹Ô캯Êýͳһ³ÉÒ»¸ö£¬²¢ÎªËùÓеĿÉÑ¡²ÎÊýÖ¸¶¨Ä¬ÈÏÖµ¡£ÆäËûµÄ¼¸¸ö¹¹Ô캯Êýµ÷ÓÃij¸ö¹¹Ô캯Êý£¬²¢Ìṩ²»Í¬µÄ²ÎÊý¼´¿É¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶EffectiveC# Second Edition¡·ÖÐÔÔò14¡£
ÔÔò11£ºÊµÏÖ±ê×¼µÄÏú»Ùģʽ
GC¿ÉÒÔ¸ßЧµØ¹ÜÀíÓ¦ÓóÌÐòʹÓõÄÄÚ´æ¡£²»¹ý´´½¨ºÍÏú»Ù¶ÑÉϵĶÔÏóÈÔ¾ÉÐèҪʱ¼ä¡£ÈôÊÇÔÚij¸ö·½·¨Öд´½¨ÁËÌ«¶àµÄÒýÓöÔÏ󣬽«»á¶Ô³ÌÐòµÄÐÔÄܲúÉúÑÏÖØµÄÓ°Ïì¡£
ÕâÀïÓÐһЩ¹æÔò£¬¿ÉÒÔ°ïÄ㾡Á¿½µµÍGCµÄ¹¤×÷Á¿£º
1£©Èôij¸öÒýÓÃÀàÐÍ£¨ÖµÀàÐÍÎÞËùν£©µÄ¾Ö²¿±äÁ¿ÓÃÓÚ±»Æµ·±µ÷ÓõÄÀý³ÌÖУ¬ÄÇôӦ¸Ã½«ÆäÌáÉýΪ³ÉÔ±±äÁ¿¡£
2£©Îª³£ÓõÄÀàÐÍʵÀýÌṩ¾²Ì¬¶ÔÏó¡£
3£©´´½¨²»¿É±äÀàÐ͵Ä×îÖÕÖµ¡£±ÈÈçstringÀàµÄ+=²Ù×÷·û»á´´½¨Ò»¸öеÄ×Ö·û´®¶ÔÏó²¢·µ»Ø£¬¶à´ÎʹÓûá²úÉú´óÁ¿À¬»ø£¬²»ÍƼöʹÓ᣶ÔÓÚ¼òµ¥µÄ×Ö·û´®²Ù×÷£¬ÍƼöʹÓÃstring.Format¡£¶ÔÓÚ¸´ÔÓµÄ×Ö·û´®²Ù×÷£¬ÍƼöʹÓÃStringBuilderÀà¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶EffectiveC# Second Edition¡·ÖÐÔÔò16¡£ ÔÔò12£ºÇø·ÖÖµÀàÐͺÍÒýÓÃÀàÐÍ
C#ÖУ¬class¶ÔÓ¦ÒýÓÃÀàÐÍ£¬struct¶ÔÓ¦ÖµÀàÐÍ¡£
C#²»ÊÇC++£¬²»Äܽ«ËùÓÐÀàÐͶ¨Òå³ÉÖµÀàÐͲ¢ÔÚÐèҪʱ¶ÔÆä´´½¨ÒýÓá£C#Ò²²»ÊÇJava£¬²»ÏñJavaÖÐÄÇÑùËùÓеĶ«Î÷¶¼ÊÇÒýÓÃÀàÐÍ¡£Äã±ØÐëÔÚ´´½¨Ê±¾Í¾ö¶¨ÀàÐ͵ıíÏÖÐÐΪ£¬ÕâÏàµ±ÖØÒª£¬ÒòΪÉÔºóµÄ¸ü¸Ä¿ÉÄÜ´øÀ´ºÜ¶àÔÖÄÑÐÔµÄÎÊÌâ¡£
ÖµÀàÐÍÎÞ·¨ÊµÏÖ¶à̬£¬Òò´ËÆä×î¼ÑÓÃ;¾ÍÊÇ´æ·ÅÊý¾Ý¡£ÒýÓÃÀàÐÍÖ§³Ö¶à̬£¬Òò´ËÓÃÀ´¶¨ÒåÓ¦ÓóÌÐòµÄÐÐΪ¡£
Ò»°ãÇé¿öÏ£¬ÎÒÃÇϰ¹ßÓÃclass£¬ËæÒâ´´½¨µÄ´ó¶¼ÊÇÒýÓÃÀàÐÍ£¬ÈôÏÂÃæ¼¸µã¶¼¿Ï¶¨£¬ÄÇôӦ¸Ã´´½¨structÖµÀàÐÍ£º
1£©¸ÃÀàÐÍÖ÷ÒªÖ°ÔðÔÚÓÚÊý¾Ý´æ´¢Âð£¿
2£©¸ÃÀàÐ͵Ĺ«Óнӿڶ¼ÊÇÓÉ·ÃÎÊÆäÊý¾Ý³ÉÔ±µÄÊôÐÔ¶¨ÒåµÄÂð£¿
3£©ÄãÈ·¶¨¸ÃÀàÐ;ø²»»áÓÐÅÉÉúÀàÐÍÂð£¿
4£©ÄãÈ·¶¨¸ÃÀàÐÍÓÀÔ¶¶¼²»ÐèÒª¶à̬֧³ÖÂð£¿
ÓÃÖµÀàÐͱíʾµ×²ã´æ´¢Êý¾ÝµÄÀàÐÍ£¬ÓÃÒýÓÃÀàÐÍÀ´·â×°³ÌÐòµÄÐÐΪ¡£ÕâÑù£¬Äã¿ÉÒÔ±£Ö¤À౩¶³öµÄÊý¾ÝÄÜÒÔ¸´ÖƵÄÐÎʽ°²È«Ìṩ£¬Ò²Äܵõ½»ùÓÚÕ»´æ´¢ºÍʹÓÃÄÚÁª·½Ê½´æ´¢´øÀ´µÄÄÚ´æÐÔÄÜÌáÉý£¬¸ü¿ÉÒÔʹÓñê×¼µÄÃæÏò¶ÔÏó¼¼ÊõÀ´±í´ïÓ¦ÓóÌÐòµÄÂß¼¡£¶øÌÈÈôÄã¶ÔÀàÐÍδÀ´µÄÓÃͼ²»È·¶¨£¬ÄÇôӦ¸ÃÑ¡ÔñÒýÓÃÀàÐÍ¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶Effective C# Second Edition¡·ÖÐÔÔò18¡£
ÔÔò13£º±£Ö¤0ΪֵÀàÐ͵ÄÓÐЧ״̬
ÔÚ´´½¨×Ô¶¨Òåö¾Ùֵʱ£¬ÇëÈ·±£0ÊÇÒ»¸öÓÐЧµÄÑ¡Ïî¡£ÈôÄ㶨ÒåµÄÊDZêÖ¾(flag)£¬ÄÇô¿ÉÒÔ½«0¶¨ÒåΪûÓÐÑ¡ÖÐÈκÎ״̬µÄ±êÖ¾£¨±ÈÈçNone£©¡£¼´×÷Ϊ±ê¼ÇʹÓõÄö¾ÙÖµ£¨¼´Ìí¼ÓÁËFlagsÌØÐÔ£©Ó¦¸Ã×ÜÊǽ«NoneÉèÖÃΪ0¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶Effective C# Second Edition¡·ÖÐÔÔò19¡£
ÔÔò14£º±£Ö¤ÖµÀàÐ͵ij£Á¿ÐÔºÍÔ×ÓÐÔ
³£Á¿ÐÔµÄÀàÐÍʹµÃÎÒÃǵĴúÂë¸ü¼ÓÒ×ÓÚά»¤¡£²»ÒªÃ¤Ä¿µØÎªÀàÐÍÖеÄÿһ¸öÊôÐÔ¶¼´´½¨getºÍset·ÃÎÊÆ÷¡£¶ÔÓÚÄÇЩĿµÄÊÇ´æ´¢Êý¾ÝµÄÀàÐÍ£¬Ó¦¸Ã¾¡¿ÉÄܵر£Ö¤Æä³£Á¿ÐÔºÍÔ×ÓÐÔ¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶Effective C# Second Edition¡·ÖÐÔÔò20¡£
ÔÔò15£ºÏÞÖÆÀàÐ͵ĿɼûÐÔ
ÔÚ±£Ö¤ÀàÐÍ¿ÉÒÔÍê³ÉÆä¹¤×÷µÄǰÌáÏ¡£ÄãÓ¦¸Ã¾¡¿ÉÄܵظøÀàÐÍ·ÖÅä×îСµÄ¿É¼ûÐÔ¡£Ò²¾ÍÊÇ£¬½ö½ö±©Â¶ÄÇЩÐèÒª±©Â¶µÄ¡£¾¡Á¿Ê¹ÓýϵͿɼûÐÔµÄÀàÀ´ÊµÏÖ¹«Óнӿڡ£¿É¼ûÐÔÔ½µÍ£¬ÄÜ·ÃÎÊÄ㹦ÄܵĴúÂëÔ½ÉÙ£¬ÒÔºó¿ÉÄܳöÏÖµÄÐÞ¸ÄÒ²¾ÍÔ½ÉÙ¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶Effective C# Second Edition¡·ÖÐÔÔò21¡£
ÔÔò16£ºÍ¨¹ý¶¨Ò岢ʵÏÖ½Ó¿ÚÌæ´ú¼Ì³Ð
Àí½â³éÏó»ùÀࣨabstract class£©ºÍ½Ó¿Ú£¨interface£©µÄÇø±ð£º
½Ó¿ÚÊÇÒ»ÖÖÆõԼʽµÄÉè¼Æ·½Ê½£¬Ò»¸öʵÏÖij¸ö½Ó¿ÚµÄÀàÐÍ£¬±ØÐëʵÏÖ½Ó¿ÚÖÐÔ¼¶¨µÄ·½·¨¡£³éÏó»ùÀàÔòΪһ×éÏà¹ØµÄÀàÐÍÌṩÁËÒ»¸ö¹²Í¬µÄ³éÏó¡£Ò²¾ÍÊÇ˵³éÏó»ùÀàÃèÊöÁ˶ÔÏóÊÇʲô£¬¶ø½Ó¿ÚÃèÊöÁ˶ÔÏó½«ÈçºÎ±íÏÖÆäÐÐΪ¡£
½Ó¿Ú²»Äܰüº¬ÊµÏÖ£¬Ò²²»Äܰüº¬ÈκξßÌåµÄÊý¾Ý³ÉÔ±¡£¶ø³éÏó»ùÀà¿ÉÒÔΪÅÉÉúÀàÌṩһЩ¾ßÌåµÄʵÏÖ¡£
»ùÀàÃèÊö²¢ÊµÏÖÁËÒ»×éÏà¹ØÀàÐͼ乲ÓõÄÐÐΪ¡£½Ó¿ÚÔò¶¨ÒåÁËÒ»×é¾ßÓÐÔ×ÓÐԵŦÄÜ£¬¹©ÆäËû²»Ïà¹ØµÄ¾ßÌåÀàÐÍÀ´ÊµÏÖ¡£
Àí½âºÃÁ½ÕßÖ®¼äµÄ²î±ð£¬ÎÒÃDZã¿ÉÒÔ´´Ôì¸ü¸»±íÏÖÁ¦¡¢¸üÄÜÓ¦¶Ô±ä»¯µÄÉè¼Æ¡£Ê¹ÓÃÀà²ã´ÎÀ´¶¨ÒåÏà¹ØµÄÀàÐÍ¡£Óýӿڱ©Â¶¹¦ÄÜ£¬²¢Èò»Í¬µÄÀàÐÍʵÏÖÕâЩ½Ó¿Ú¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶EffectiveC# Second Edition¡·ÖÐÔÔò22¡£
ÔÔò17£ºÀí½â½Ó¿Ú·½·¨ºÍÐé·½·¨µÄÇø±ð
µÚÒ»ÑÛ¿´À´£¬ÊµÏֽӿں͸²Ð´Ðé·½·¨ËƺõûÓÐÊ²Ã´Çø±ð£¬Êµ¼ÊÉÏ£¬ÊµÏֽӿں͸²Ð´Ðé·½·¨Ö®¼äµÄ²î±ðºÜ´ó¡£
½Ó¿ÚÖÐÉùÃ÷µÄ³ÉÔ±·½·¨Ä¬ÈÏÇé¿öϲ¢·ÇÐé·½·¨£¬ËùÒÔ£¬ÅÉÉúÀ಻Äܸ²Ð´»ùÀàÖÐʵÏֵķÇÐé½Ó¿Ú³ÉÔ±¡£ÈôÒª¸²Ð´µÄ»°£¬½«½Ó¿Ú·½·¨ÉùÃ÷Ϊvirtual¼´¿É¡£
»ùÀà¿ÉÒÔΪ½Ó¿ÚÖеķ½·¨ÌṩĬÈϵÄʵÏÖ£¬Ëæºó£¬ÅÉÉúÀàÒ²¿ÉÒÔÉùÃ÷ÆäʵÏÖÁ˸ýӿڣ¬²¢´Ó»ùÀàÖм̳иÃʵÏÖ¡£
ʵÏÖ½Ó¿ÚÓµÓеÄÑ¡ÔñÒª±È´´½¨ºÍ¸²Ð´Ðé·½·¨¶à¡£ÎÒÃÇ¿ÉÒÔΪÀà²ã´Î´´½¨Ãܷ⣨sealed£©µÄʵÏÖ£¬ÐéʵÏÖ»òÕß³éÏóµÄÆõÔ¼¡£»¹¿ÉÒÔ´´½¨ÃÜ·âµÄʵÏÖ£¬²¢ÔÚʵÏֽӿڵķ½·¨ÖÐÌṩÐé·½·¨½øÐе÷Óá£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶EffectiveC# Second Edition¡·ÖÐÔÔò23¡£
ÔÔò18£ºÓÃίÍÐʵÏֻص÷
ÔÚC#ÖУ¬»Øµ÷ÊÇÓÃίÍÐÀ´ÊµÏֵģ¬Ö÷ÒªÒªµãÈçÏ£º
ίÍÐΪÎÒÃÇÌṩÁËÀàÐͰ²È«µÄ»Øµ÷¶¨Òå¡£ËäÈ»´ó¶àÊý³£¼ûµÄίÍÐÓ¦Óö¼ºÍʼþÓйأ¬µ«Õâ²¢²»ÊÇC#ίÍÐÓ¦ÓõÄÈ«²¿³¡ºÏ¡£µ±ÀàÖ®¼äÓÐͨÐŵÄÐèÒª£¬²¢ÇÒÎÒÃÇÆÚÍûÒ»ÖֱȽӿÚËùÌṩµÄ¸üΪËÉÉ¢µÄñîºÏ»úÖÆÊ±£¬Î¯ÍбãÊÇ×î¼ÑµÄÑ¡Ôñ¡£
ίÍÐÔÊÐíÎÒÃÇÔÚÔËÐÐʱÅäÖÃÄ¿±ê²¢Í¨Öª¶à¸ö¿Í»§¶ÔÏó¡£Î¯ÍжÔÏóÖаüº¬Ò»¸ö·½·¨µÄÓ¦Ó㬸÷½·¨¿ÉÒÔÊǾ²Ì¬·½·¨£¬Ò²¿ÉÒÔÊÇʵÀý·½·¨¡£Ò²¾ÍÊÇ˵£¬Ê¹ÓÃίÍУ¬ÎÒÃÇ¿ÉÒÔºÍÒ»¸ö»ò¶à¸öÔÚÔËÐÐʱÁªÏµÆðÀ´µÄ¿Í»§¶ÔÏó½øÐÐͨÐÅ¡£
ÓÉÓڻص÷ºÍίÍÐÔÚC#Öзdz£³£Óã¬ÒÔÖÁÓÚC#ÌØµØÒÔlambda±í´ïʽµÄÐÎʽΪÆäÌṩÁ˾«¼òÓï·¨¡£
ÓÉÓÚһЩÀúÊ·ÔÒò£¬.NETÖеÄίÍж¼ÊǶಥίÍУ¨multicast delegate£©¡£¶à²¥Î¯Íе÷Óùý³ÌÖУ¬Ã¿¸öÄ¿±ê»á±»ÒÀ´Îµ÷Óá£Î¯ÍжÔÏó±¾Éí²»»á²¶×½ÈκÎÒì³£¡£Òò´Ë£¬ÈκÎÄ¿±êÅ׳öµÄÒì³£¶¼»á½áÊøÎ¯ÍÐÁ´µÄµ÷Óá£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶EffectiveC# Second Edition¡·ÖÐÔÔò24¡£
ÔÔò19£ºÓÃʼþģʽʵÏÖ֪ͨ
ʼþÌṩÁËÒ»ÖÖ±ê×¼µÄ»úÖÆÀ´Í¨Öª¼àÌýÕߣ¬¶øC#ÖеÄʼþÆäʵ¾ÍÊǹ۲ìÕßģʽµÄÒ»¸öÓï·¨ÉϵĿì½ÝʵÏÖ¡£
ʼþÊÇÒ»ÖÖÄÚ½¨µÄίÍУ¬ÓÃÀ´ÎªÊ¼þ´¦Àíº¯ÊýÌṩÀàÐͰ²È«µÄ·½·¨Ç©Ãû¡£ÈÎÒâÊýÁ¿µÄ¿Í»§¶ÔÏ󶼿ÉÒÔ½«×Ô¼ºµÄ´¦Àíº¯Êý×¢²áµ½Ê¼þÉÏ£¬È»ºó´¦ÀíÕâЩʼþ£¬ÕâЩ¿Í»§¶ÔÏóÎÞÐèÔÚ±àÒëÆ÷¾Í¸ø³ö£¬Ê¼þÒ²²»±Ø·ÇÒªÓж©ÔÄÕß²ÅÄÜÕý³£¹¤×÷¡£
ÔÚC#ÖÐʹÓÃʼþ¿ÉÒÔ½µµÍ·¢ËÍÕߺͿÉÄܵÄ֪ͨ½ÓÊÜÕßÖ®¼äµÄñîºÏ£¬·¢ËÍÕß¿ÉÒÔÍêÈ«¶ÀÁ¢ÓÚ½ÓÊÜÕß½øÐпª·¢¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶EffectiveC# Second Edition¡·ÖÐÔÔò25¡£
ÔÔò20£º±ÜÃâ·µ»Ø¶ÔÄÚ²¿Àà¶ÔÏóµÄÒýÓÃ
Èô½«ÒýÓÃÀàÐÍͨ¹ý¹«Óнӿڱ©Â¶¸øÍâ½ç£¬ÄÇô¶ÔÏóµÄʹÓÃÕß¼´¿ÉÈÆ¹ýÎÒÃǶ¨ÒåµÄ·½·¨ºÍÊôÐÔÀ´¸ü¸Ä¶ÔÏóµÄÄÚ²¿½á¹¹£¬Õâ»áµ¼Ö³£¼ûµÄ´íÎó¡£
¹²ÓÐËÄÖÖ²»Í¬µÄ²ßÂÔ¿ÉÒÔ·ÀÖ¹ÀàÐÍÄÚ²¿µÄÊý¾Ý½á¹¹Ôâµ½ÓÐÒâ»òÎÞÒâµÄÐ޸ģº
1£©ÖµÀàÐÍ¡£µ±¿Í»§´úÂëͨ¹ýÊôÐÔÀ´·ÃÎÊÖµÀàÐͳÉԱʱ£¬Êµ¼Ê·µ»ØµÄÊÇÖµÀàÐ͵ĶÔÏ󸱱¾¡£
2£©³£Á¿ÀàÐÍ¡£ÈçSystem.String¡£
3£©¶¨Òå½Ó¿Ú¡£½«¿Í»§¶ÔÄÚ²¿Êý¾Ý³ÉÔ±µÄ·ÃÎÊÏÞÖÆÔÚÒ»²¿·Ö¹¦ÄÜÖС£
4£©°ü×°Æ÷£¨wrapper£©¡£Ìṩһ¸ö°ü×°Æ÷£¬½ö±©Â¶¸Ã°ü×°Æ÷£¬´Ó¶øÏÞÖÆ¶ÔÆäÖжÔÏóµÄ·ÃÎÊ¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶Effective C# Second Edition¡·ÖÐÔÔò26¡£
ÔÔò21£º½öÓÃnewÐÞÊηû´¦Àí»ùÀà¸üÐÂ
ʹÓÃnew²Ù×÷·ûÐÞÊÎÀà³ÉÔ±¿ÉÒÔÖØÐ¶¨Òå¼Ì³Ð×Ô»ùÀàµÄ·ÇÐé³ÉÔ±¡£
newÐÞÊηûÖ»ÊÇÓÃÀ´½â¾öÉý¼¶»ùÀàËùÔì³ÉµÄ»ùÀà·½·¨ºÍÅÉÉúÀà·½·¨³åÍ»µÄÎÊÌâ¡£
new²Ù×÷·û±ØÐëСÐÄʹÓá£ÈôËæÐÄËùÓûµÄÀÄÓ㬻áÔì³É¶ÔÏóµ÷Ó÷½·¨µÄ¶þÒåÐÔ¡£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶Effective C# Second Edition¡·ÖÐÔÔò33¡£
ÔÔò22£º¾¡Á¿¼õÉÙÔÚ¹«ÓÐAPIÖÐʹÓö¯Ì¬¶ÔÏó
£¨ÕâÌõ×¼ÔòÔÚUnityÖÐÇëºöÂÔ£¬ÒòΪUnity°æ±¾µÄmono²¢Ã»ÓÐʵÏÖ.NET 4.0ÖеÄdynamic
language runtime£©
¶¯Ì¬¶ÔÏóÓÐһЩ¡°Ç¿ÖÆÐÔ¡±£¬¼´ËùÓдò½»µÀµÄ¶ÔÏó¶¼±ä³É¶¯Ì¬µÄ¡£ÈôÊÇij¸ö²Ù×÷µÄij¸ö²ÎÊýÊǶ¯Ì¬µÄ£¬ÄÇôÆä½á¹ûÒ²»áÊǶ¯Ì¬µÄ¡£ÈôÊÇÿ¸ö·½·¨·µ»ØÁËÒ»¸ö¶¯Ì¬¶ÔÏó£¬ÄÇôËùÓÐʹÓùý¸Ã¶ÔÏóµÄµØ·½Ò²±ä³ÉÁ˶¯Ì¬¶ÔÏó¡£
ËùÒÔ£¬ÈôÄãÒªÔÚ³ÌÐòÖÐʹÓö¯Ì¬ÌØÐÔ£¬Ç뾡Á¿²»ÒªÔÚ¹«ÓнӿÚÖÐʹÓã¬ÕâÑù¿ÉÒÔ½«¶¯Ì¬ÀàÐÍÏÖÔÚÔÚÒ»¸öµ¥¶ÀµÄ¶ÔÏó»òÀàÐÍÖС£
Ó¦¸Ã½«¶¯Ì¬¶ÔÏóÏÞÖÆÔÚ×îÐèÒªµÄµØ·½£¬È»ºóÁ¢¼´½«¶¯Ì¬¶ÔÏóת»»Îª¾²Ì¬ÀàÐÍ¡£µ±ÄãµÄ´úÂëÒÀÀµÓÚÆäËû»·¾³Öд´½¨µÄ¶¯Ì¬ÀàÐÍʱ£¬¿ÉÒÔÓÃרÃŵľ²Ì¬ÀàÐÍ·â×°ÕâЩ¶¯Ì¬¶ÔÏ󣬲¢Ìṩ¾²Ì¬µÄ¹«Óнӿڡ£
PS: ´ËÔÔò¶ÔÓ¦ÓÚ¡¶Effective C# Second Edition¡·ÖÐÔÔò44¡£ |