Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
¡¾¡¶Effective C#¡·ÌáÁ¶×ܽ᡿Ìá¸ßUnityÖÐC#´úÂëÖÊÁ¿µÄ22Ìõ×¼Ôò
 
×÷ÕߣºÇ³Ä«_ëÐÇÔÆ   À´Ô´£ºcsdn   ·¢²¼ÓÚ£º 2017-1-4
  2734  次浏览      31
 

ÒýÑÔ

ÎÒÃÇÖªµÀ£¬ÔÚ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¡£

   
2734 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

WEBÓ¦ÓóÌÐòUIÄ£°æ´úÂë±àд
C# ±àÂë¹æ·¶ºÍ±à³ÌºÃϰ¹ß
ʲôÊÇ·ÀÓùÐÔ±à³Ì
ÉÆÓÚ·ÀÊØ-½¡×³´úÂëµÄ·ÀÓùÐÔ
Visual C++±à³ÌÃüÃû¹æÔò
JavaScript³ÌÐò±àÂë¹æ·¶


Éè¼ÆÄ£Ê½Ô­ÀíÓëÓ¦ÓÃ
´ÓÐèÇó¹ý¶Éµ½Éè¼Æ
Èí¼þÉè¼ÆÔ­ÀíÓëʵ¼ù
ÈçºÎ±àд¸ßÖÊÁ¿´úÂë
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
Èí¼þ¿ª·¢¹ý³ÌÖ¸ÄÏ


ijȫÇòÖªÃûͨÐŹ«Ë¾ ´úÂëÕû½à
ºáºÓµç»ú ÈçºÎ±àд¸ßÖÊÁ¿´úÂë
ij֪Ãû½ðÈÚÈí¼þ·þÎñÉÌ ´úÂëÆÀÉó
¶«Èí¼¯ÍÅ ´úÂëÖØ¹¹
ij½ðÈÚÈí¼þ·þÎñÉÌ ¼¼ÊõÎĵµ
Öдïµçͨ Éè¼ÆÄ£Ê½Ô­ÀíÓëʵ¼ù
·¨¹úµçÐÅ ¼¼ÊõÎĵµ±àдÓë¹ÜÀí