ºìÁªLinuxÃÅ»§
Linux°ïÖú

Stan Lippman£ºC++/CLIÈ«¾°ÌåÑé

·¢²¼Ê±¼ä:2006-05-03 12:05:35À´Ô´:ºìÁª×÷Õß:°®µÄ±ßÔµ
¡¡×î½üÎÒ·ÃÎÊÁËÖйúµÄÉϺ£ºÍ±±¾©£¬²Î¼ÓÔÚÁ½µØ¾Ù°ìµÄ΢Èí Tech-ED ¼¼Êõ´ó»á£¬ÔÚÄÇÀïÎҷdz£ÈÙÐÒµØÏò´ó¼Ò½éÉÜÁËÎÒÃÇÔÚ C++/CLI ·½ÃæµÄ¹¤×÷¡£´ó¼ÒµÄ·´À¡·Ç³£Ö®ºÃ£¬ÌرðÊÇÖйúÄêÇáÒ»´ú³ÌÐòÔ±¶Ô C++/CLI µÄÈÈ°®ºÍÀí½â¸øÎÒÁôÏÂÁËÉî¿ÌµÄÓ¡Ïó¡£ÔÚÄÇÀÎÒ»¹ÈÏʶÁËÀ´×ÔÉϺ£µÄһλ¿ª·¢ÈËÔ±£¬Í¬Ê±Ò²ÊÇһλ¼¼Êõ×÷Õߣ¬ ÀÖÒÏÈÉú¡£ÎÒÃǾ­¹ýÌÖÂÛÖ®ºó¾ö¶¨ºÏ×÷׫дһϵÁÐ C++/CLI ·½ÃæµÄÎÄÕ£¬²¢ÒÔ¡°C++/CLIÈ«¾°ÌåÑ顱רÀ¸µÄÐÎʽ¶À¼ÒÊÚȨÓÚÖйú¡¶³ÌÐòÔ±¡·ÔÓÖ¾·¢±í¡£Õâƪ¶ÌÎÄÖ¼ÔÚΪ´ó¼Ò¼òµ¥½éÉÜÒ»ÏÂÎÒÃÇд×÷Õâ¸öרÀ¸µÄһЩ±³¾° ----ÓеãµçÓ°ÖС°¶¨³¡¾µÍ·¡±µÄζµÀ¡£

¡¡¡¡Ãæ¶Ô C++/CLI £¬ºÜ¶àÈ˵ĵÚÒ»¸öÎÊÌâ×ÔÈ»ÊÇ¡°Ê²Ã´ÊÇ C++/CLI ¡±£¬ÎÒ¸öÈËϲ»¶½«Æä¿´×÷ÊÇλÓÚ¾²Ì¬³ÌÐòÉè¼ÆºÍ¶¯Ì¬³ÌÐòÉè¼ÆÖ®¼äµÄÒ»×ùÇÅÁº¡£ C++/CLI Õâ¸öÃû³Æ±¾Éí¾Í°üº¬×ÅÒ»×éÊõÓï----¶øÆäÖÐ×îÖØÒªµÄÊõÓïÈ´ÊÇ×î²»Ã÷ÏÔµÄÄÇÒ»¸ö¡£

¡¡¡¡Ê×ÏÈÀ´¿´µÚÒ»¸öÊõÓï¡° C++ ¡±£¬Õ⵱ȻָµÄÊÇÓÉ Bjarne Stroustrup ÔÚ Bell ʵÑéÊÒʱ·¢Ã÷µÄ C++ ±à³ÌÓïÑÔ¡£ËüËùÖ§³ÖµÄÊÇÒ»ÖÖΪ´úÂëÖ´ÐÐËٶȺÍÖ´ÐÐÌåËùÕ¼¿Õ¼äËù¸ß¶ÈÓÅ»¯µÄ¾²Ì¬¶ÔÏóÄ£ÐÍ¡£³ýÁ˶ÑÄÚ´æ·ÖÅäÒÔÍ⣬Ëü²»Ö§³ÖÔÚÔËÐÐʱ¶ÔÓ¦ÓóÌÐò½øÐÐÈκεĸü¸Ä¡£ËüÔÊÐíÎÒÃǶԵײã»úÆ÷½øÐÐÎÞÏ޵ķÃÎÊ£¬µ«¶ÔÓÚÕýÔÚÔËÐеijÌÐòÖеĻÀàÐÍ¡¢ÒÔ¼°Ïà¹ØµÄ³ÌÐò»ù´¡¹¹Ô죬ËüµÄ·ÃÎÊÄÜÁ¦È´·Ç³£ÓÐÏÞ¡¢»òÕ߸ù±¾¾Í²»¿ÉÄÜ¡£ËüÊÇÒ»Ãŷdz£³É¹¦µÄ±à³ÌÓïÑÔ£¬µ«ÊÇËüÈ´²»ÄÜÊÊӦĿǰµÄ Web ±à³Ì»·¾³ÒÔ¼°Ïà¹ØµÄ°²È«ÎÊÌâ----ÕâÒѾ­³ÉΪĿǰ³ÌÐòÉè¼ÆÖÐÒ»¸öÔ½À´Ô½ÖØÒªµÄ¿¼Á¿¡£

¡¡¡¡ÔÙÀ´¿´µÚÈý¸öÊõÓï¡° CLI ¡±£¬¼´Í¨ÓÃÓïÑÔ»ù´¡¹¹Ô죨 Common Language Infrastructure £©£¬ÕâÊÇÒ»¸öÖ§³Ö¶¯Ì¬×é¼þ±à³ÌÄ£Ð͵Ķà²ã¼Ü¹¹¡£ÔÚÐí¶à·½Ã棬ËüËù±íʾµÄ¶ÔÏóÄ£ÐÍºÍ C++ µÄÍêÈ«Ïà·´¡£ÔÚ CLI ÖУ¬´æÔÚÒ»¸öÔËÐÐʱÈí¼þ²ã£¨¼´ÐéÄâÖ´Ðл·¾³£©ÔËÐÐÔÚÓ¦ÓóÌÐòºÍµ×²ã²Ù×÷ϵͳ֮¼ä£¬Ó¦ÓóÌÐò´úÂë¶Ôµ×²ã»úÆ÷µÄ·ÃÎÊ»áÊܵ½Ï൱ÑϸñµÄÏÞÖÆ£»ÊÂʵÉÏ£¬ CLI ¸ù±¾²»ÔÊÐí°²È«»·¾³ÖеĴúÂë½øÐÐÕâÑùµÄ·ÃÎÊ¡£µ«ÁíÒ»·½Ã棬 CLI È´ÔÊÐíÎÒÃǶÔÕýÔÚÔËÐеijÌÐòÖеĻÀàÐÍ¡¢ÒÔ¼°Ïà¹ØµÄ³ÌÐò»ù´¡¹¹Ôì½øÐÐÍêÈ«µÄ·ÃÎÊ£¬ÉõÖÁÔÊÐíÎÒÃǶ¯Ì¬¹¹Ôì¶îÍâµÄÀàÐͺͳÌÐò»ù´¡¹¹Ôì¡£ÕâЩÁé»îÐԵĻñµÃµ±È»°éËæÓÐÏ൱µÄ¿Õ¼ä£¨Ö´ÐÐÌåËùÕ¼¿Õ¼ä£©ºÍʱ¼ä£¨³ÌÐòÖ´ÐÐЧÂÊ£©´ú¼Û£¬µ«ÊÇËüÈ´½â¾öÁËÈÕÒæÔö³¤µÄ»ùÓÚÁ¬½ÓµÄ¼ÆËã»·¾³ÖÐËùÃæÁÙµÄÎÊÌâºÍÐèÒª¡£

¡¡¡¡×îºó£¬ÔÙÀ´¿´µÚ¶þ¸öÊõÓ¼´ÖмäµÄбÏß¡° / ¡±£¬ËüÍùÍùΪÈËÃÇËùºöÂÔ¡£Æä±íʾ¶Ô C++ ºÍ CLI µÄÒ»Öְ󶨣¨ binding £©£¬ËüÕýÊÇ C++/CLI Éè¼ÆµÄ½¹µãËùÔÚ¡£¾Ý´Ë£¬¶ÔÓÚ¡°Ê²Ã´ÊÇ C++/CLI ¡±ÕâÒ»ÎÊÌâ¿ÉÄܵÄÒ»Öִ𰸱ãÊÇ¡°ËüÊǶԾ²Ì¬ C++ ¶ÔÏóÄ£ÐͺͶ¯Ì¬ CLI ×é¼þÄ£Ð͵ÄÒ»Öְ󶨡±¡£

¡¡¡¡¶ÔÓÚ C++/CLI £¬Ò»¸ö C++ ³ÌÐòÔ±Ö»ÐèÒª½«ÆäÌí¼Óµ½Ëý [ Òë×¢ 1] ÒÑÓеıà³Ì¹¤¾ßÏäÖоͿÉÒÔÁË¡£Òª³ÉΪһ¸ö C++/CLI ³ÌÐòÔ±£¬ÄãÎÞÐè·ÅÆúÈκÎÒÑÓеĶ«Î÷£¬ËäÈ»ÄãÒª²½ÈëÒ»¸öеļ¼ÊõÊÀ½ç£¬ÄãÈÔÈ»ÐèҪѧϰËü----µ«Ô¸ÄãÄÜÏíÊÜÕâÒ»¹ý³Ì£¬ÖÁÉÙÎÒÖªµÀÎÒÊÇÕâÑùµÄ¡£Óɴ˹ÛÖ®£¬ÎÒÃÇ»¹¿ÉÒÔ½« C++/CLI ¿´×÷ÊÇÒ»ÉÈͨÍùÁíÒ»¸öÊÀ½çµÄ´óÃÅ¡£

¡¡¡¡C++/CLI ½«¶¯Ì¬µÄ¡¢»ùÓÚ×é¼þµÄ±à³ÌÄ£ÐÍºÍ ISO-C++ ¼¯³ÉÔÚÁËÒ»Æð£¬ÕâÖÖ¼¯³É·Ç³£ÀàËÆÓÚÎÒÃǵ±ÄêÔÚ Bell ʵÑéÊÒ¶ÔʹÓÃÄ£°åµÄ·ºÐͱà³ÌºÍµ±Ê±µÄ C++ Ëù×öµÄ¼¯³É¡£ÔÚÁ½ÖÖÇé¿öÏ£¬ÄãÒÑÓеĴúÂëͶ×ʺͱàÂë¾­Ñ鶼½«µÃµ½±£Áô¡£ÕâÊÇÎÒÃÇÉè¼Æ C++/CLI ʱһ¸ö»ù±¾µÄÐèÇó¡£

¡¡¡¡Í¨ÓÃÓïÑÔ»ù´¡¹¹Ô죨 CLI £©ÊÇÒ»¸ö¶à²ãµÄÌåϵ¼Ü¹¹£¬ËüΪËùÓÐ CLI ÓïÑÔÌṩÁ˸÷ÖÖ¸÷ÑùµÄ·þÎñ¡£ÀýÈç CLI Öж¨ÒåÁËÒ»¸öͨÓÃÀàÐÍϵͳ£¨ Common Type System £¬¼ò³Æ CTS £©£¬¶ø¸÷¸ö CLI ÓïÑÔ¶¼ÌṩÁË×Ô¼º¶Ô CTS µÄÒ»¸öÓ³Éä¡£¸ÃÀàÐÍϵͳÓÉÒ»¸ö¸ù»ùÀ࿪ʼ±»×é֯Ϊһ¸öÍêÕûµÄÀà¼Ì³ÐÌåϵ¡£Êµ¼ÊÉÏ£¬Ã¿Ò»¸ö CLI ÀàÐͶ¼ÊÇÒ»¸öÀà----²»½ö°üÀ¨Ïñ integer ¡¢ double ÕâÑùµÄÊýÖµÀàÐÍ£¬¶øÇÒÒ²°üÀ¨×ÖÃæ³£Á¿£¨ literal constant £©¡£Ã¿Ò»¸ö CLI ÀàÐÍ£¨»òÕßÖµ£©¶¼±íʾһÖÖ Object £¨ËùÓÐ CLI ÀàÐ͵ĸù»ùÀࣩ£¬±ÈÈçÊýÖµ 3.14159 ¡¢±ÈÈç×Ö·û´®³£Á¿ "Homer Simpson" ¡£

µ¥Ò»µÄ¸ù»ùÀàΪÔËÐÐʱÀàÐͲéѯºÍ´úÂëÉú³É£¨Í¨³£±»³ÆΪ·´É䣩ÌṩÁËÖ§³Ö»úÖÆ [ Òë×¢ 2] £¬ÕâÊÇ ISO-C++ Ëùȱ·¦µÄ¡£ÎÒÃǽ«ÔÚ½ñºóһϵÁÐÎÄÕÂÖÐÏêϸÌÖÂÛËüÃǸø CLI ´øÀ´µÄ¶¯Ì¬±à³ÌÌØÐÔ¡£

¡¡¡¡³ý´ËÖ®Í⣬ CLI »¹Ö§³ÖÒ»ÖÖ±»³Æ×÷ÌØÐÔÔªÊý¾Ý£¨ attribute metadata £©µÄ¹¹Ô죬ËüÔÊÐíÎÒÃǶ¨ÒåһЩÌØÐÔÀ࣬Ȼºó½«Æä¹ØÁªÔÚ CLI ÀàÐͺ͵±Ç°ÕýÔÚÔËÐеijÌÐò¹¹ÔìÉÏ----ÕâÓÐЧµØÀ©Õ¹ÁËÄÚ½¨ÓÚ CLI ÖеÄÀàÐͺͳÌÐò¹¹Ôì¡£ÕâЩÓû§¶¨ÒåµÄÌØÐÔÒ²¿ÉÒÔͨ¹ý·´Éä»úÖÆÀ´»ñµÃ£¬Ó¦ÓóÌÐòÔò¿ÉÒÔ¸ù¾ÝËüÃǵÄÖµÀ´½øÐÐÌõ¼þÂß¼­Åжϡ£ÕâÒ²ÊÇ C++/CLI Ϊ C++ ´øÀ´µÄ¶¯Ì¬×é¼þ±à³ÌµÄÒ»²¿·Ö¡£ÔÙ´ÎÇ¿µ÷Ò»±é£¬ÀàÐÍ·´ÉäºÍÌØÐÔ½«ÔÚÎÒÃǵÄרÀ¸Öеõ½ÉîÈëµÄÌÖÂÛ¡£

¡¡¡¡ÄÇô£¬¶ÔÓÚ´ó¼ÒÀ´ËµÔõÑùѧϰ C++/CLI ÄØ£¿Ñ§Ï° C++/CLI µÄÆäÖÐÒ»¸öÒªµã±ãÊÇѧϰµ×²ãµÄͨÓÃÀàÐÍϵͳ£¨ CTS £©£¬Ëü°üÀ¨ÒÔÏÂÈýÖÖÀàÐÍ£º

¡¡¡¡1£® ¶à̬ÒýÓÃÀàÐÍ£¬ÆäÓÃÓÚËùÓеÄÀà¼Ì³Ð¡£ÎÒÃǽ«ÔÚÔçÆÚµÄһЩרÀ¸ÎÄÕÂÖÐÌÖÂÛËüÃÇ¡£

¡¡¡¡2£® ·Ç¶àֵ̬ÀàÐÍ£¬ÆäÓÃÓÚʵÏÖһЩÀàËÆÓÚÊýÖµÀàÐÍÄÇÑùµÄ¡¢¶ÔÔËÐÐʱЧÂÊÒªÇó±È½Ï¸ßµÄÀàÐÍ¡£ÎÒÃǽ«Æä·ÅÔÚÒýÓÃÀàÐÍÖ®ºóÌÖÂÛ¡£

¡¡¡¡3£® ³éÏó½Ó¿ÚÀàÐÍ£¬ÆäÓÃÓÚ¶¨ÒåÒ»×鹩ÒýÓÃÀàÐÍ»òÕßÖµÀàÐÍʵÏֵIJÙ×÷¡£½Ó¿ÚΪ¶à¼Ì³ÐÌṩÁËÒ»ÖÖ±ðÑùµÄÉè¼Æģʽ¡£ÎÒÃÇÒ²½«ÓÐһϵÁÐרÀ¸ÎÄÕÂÀ´ÌÖÂÛËüÃÇ¡£

¡¡¡¡½« CTS Ó³ÉäΪһ×éÓïÑÔÄÚÖÃÀàÐͶÔÓÚËùÓÐµÄ CLI ÓïÑÔ¶¼ÊÊÓã¬ËäÈ»¸÷ÖÖÓïÑÔËùʹÓõÄÓï·¨¸÷²»Ïàͬ¡£ÕâÒ²ÊÇÒ»ÃÅ CLI ÓïÑÔËùÒªÃæ¶ÔµÄµÚÒ»¸öÉè¼Æ²ãÃæ¡£ÀýÈ磬ÔÚ C# ÖУ¬ÎÒÃÇ¿ÉÒÔÓÃÒÔÏ´úÂëÀ´¶¨ÒåÒ»¸ö³éÏó»ùÀàÐÍ Shape £¨Ò»Ð©¾ßÌåµÄ¼¸ºÎ¶ÔÏ󽫼̳Ð×ÔËü£©¡£

¡¡¡¡public abstract class Shape {¡­}

¡¡¡¡¶øÔÚ C++/CLI ÖУ¬ÎÒÃÇÓÃÏÂÃæµÄ´úÂëÀ´¶¨ÒåͬÑùµÄÀàÐÍ¡£

¡¡¡¡public ref class Shape abstract {¡­};

¡¡¡¡³ýÁËÓï·¨²îÒìÖ®Í⣬Á½ÖÖÉùÃ÷µÄʵ¼Ê±íʾÍêÈ«Ïàͬ¡£ÀàËƵأ¬ÔÚ C# ÖУ¬ÎÒÃÇ¿ÉÒÔÓÃÏÂÃæµÄ´úÂëÀ´¶¨ÒåÒ»¸ö¾ßÌåÀà Point2D ¡£

¡¡¡¡public struct Point2D {¡­}

¡¡¡¡¶øÔÚ C++/CLI ÖУ¬ÎÒÃÇÓÃÏÂÃæµÄ´úÂëÀ´¶¨ÒåͬÑùµÄÀàÐÍ¡£

¡¡¡¡public value class Point2D {¡­};

¡¡¡¡ÎÒÃǶÔÓï·¨µÄÑ¡Ôñ»ùÓÚÈçϵijö·¢µã£ºÒÔÒ»ÖÖÖ±¹ÛµÄÉè¼ÆÊӽǽ« CLI ÀàÐÍºÍ ISO-C++ ÀàÐͽôÃܵؼ¯³ÉÔÚÒ»Æð¡£

¡¡¡¡Òò´Ë£¬¼òµ¥µØ˵һÖÖÓïÑÔ±ÈÁíÒ»ÖÖÓïÑÔ¸ü½Ó½üµ×²ã CLI ²¢²»ÕýÈ·¡£Ïà·´£¬Ã¿Ò»ÃÅ CLI ÓïÑÔ¶¼Ö»ÊDZí´ïÁË×Ô¼º¶Ôµ×²ã CLI ¶ÔÏóÄ£Ð͵ÄÒ»ÖÖÊÓͼ¡£

ѧϰ C++/CLI µÄµÚ¶þ¸öÒªµãÊÇѧϰÎÒÃÇÑ¡ÔñÖ±½ÓÌṩ¸ø³ÌÐòÔ±²Ù×÷µÄÄÇЩµ×²ã CLI ÔªËØ¡£ÀýÈ磬 CLI ΪËùÓÐÓïÑÔ¶¼ÌṩÁËÀ¬»øÊÕ¼¯·þÎñ¡£Ò»ÃÅÓïÑÔ²»ÄÜÑ¡ÔñÊÇ·ñÖ§³ÖÀ¬»øÊÕ¼¯£¬¶øÖ»ÄÜÑ¡ÔñÈçºÎ¸üºÃµØÌṩ¸Ã·þÎñ¡£
¡¡¡¡ÔÚ CLI ÖУ¬Ò»¸öÒýÓÃÀàÐ͵ÄËùÓжÔÏó¶¼Ö»Äܱ»·ÖÅäÔÚ CLI ÍйܶÑÉÏ¡£ÕâÒâζ×Å C++/CLI Ö§³ÖÁ½ÖÖ¶¯Ì¬¶Ñ----±¾µØ¶Ñ£¨Ã»ÓÐÈκÎÐÎʽµÄ×Ô¶¯ÄÚ´æ»ØÊÕ»úÖÆ£©£¬ºÍ CLI Íйܶѡ£¶ÔÓÚÕâÁ½ÖÖ¶¯Ì¬¶Ñ£¬¿ª·¢ÈËԱͨ³£ÒªÓÃijÖÖÐÎʽµÄ new ²Ù×÷·ûÀ´·ÖÅä¶ÔÏó£»Èç¹û²Ù×÷³É¹¦£¬¶ÔÏóÔÚ¶ÑÖгõʼλÖõĵØÖ·½«±»·µ»Ø¡£µ«ÊÇÁ½ÕßÓÖÓÐËùÇø±ð£¬ÕâÊÇÒòΪ CLI ÍйܶÑÖжÔÏóµÄλÖÃÓпÉÄÜÔÚÀ¬»øÊÕ¼¯Æ÷µÄÇå³ýÒÔ¼°ËæºóµÄѹËõÖб»ÖØе÷Õû¡£Èç¹ûÒ»¸ö¶ÔÏóµÄλÖñ»ÖØе÷Õû£¬ÄÇô CLI ÔËÐÐʱÖÐËùº¬µÄÆäÖÐÒ»Ïî·þÎñ»á͸Ã÷µØ¸üÐÂËùÓÐÒýÓøöÔÏóµÄÖ¸´úÆ·£¨ thingee £©¡£

¡¡¡¡Õâ¾ÍʹµÃÎÒÃÇÃæÁÙ×ÅÒ»ÖÖÀ§ÄѵÄÑ¡Ôñ£ºÎÒÃÇÊǽ«ÕâЩָ´úÆ·³ÆΪָÕ룬²¢ÇÒ¼ÌÐøÓÃÖ¸ÕëµÄÓï·¨À´±íʾËüÃÇÄØ£¿»¹ÊÇÒýÈëÒ»ÖÖеÄÀàËƵÄÓï·¨À´±íʾËüÃÇÐèÒªÌØÊâµÄ´¦Àí£¿ÎÒÃÇ×îºó¾ö¶¨²ÉÓúóÕߣ¬¿´ÏÂÃæµÄ´úÂ룺

¡¡¡¡N *pn = new N;

¡¡¡¡R ^rn = gcnew R;

¡¡¡¡ÕâÀ N ±íʾһ¸ö±¾µØÀàÐÍ£¬¶ø R ±íʾһ¸ö CLI ÒýÓÃÀàÐÍ£¬Ã±×Ó×´µÄ·ûºÅ£¨ ^ £©±íʾÏà¹ØµÄµØÖ·ÊÇÒ»¸öÍйܶÑÉϵÄ×·×Ù¾ä±ú£¨ tracking handle £©----Ò²¾ÍÊÇ˵£¬¶ÔÏóλÖõÄÈκÎÖØе÷Õû¶¼»á±» CLI Ëù×·×Ù£¬ÏàÓ¦µÄ¾ä±úÒ²»á±»Í¸Ã÷µØ¸üС£ÆäÖйؼü×Ö gcnew ÔÚÕâÀï±»ÓÃ×÷Óë CLI ÍйܶѴò½»µÀµÄ new ±í´ïʽ¡£

¡¡¡¡ÖµÀàÐÍÊÂʵÉÏÒ²¿ÉÒÔλÓÚÍйܶÑÉÏ£¬ËäÈ»Õâ²¢·Ç±ØÐë¡£µ±ËüÃÇ×÷Ϊһ¸öÒýÓÃÀàÐ͵ijÉԱʱ£¬¾Í»á³öÏÖÕâÖÖÇé¿ö¡£Èç¹ûÎÒÃÇÔÊÐí»ñÈ¡Ò»¸öÒýÓÃÀàÐÍÄÚ²¿³ÉÔ±µÄµØÖ·£¬ÄÇô±¾µØÖ¸ÕëÒ²ÊDz»ºÏÊʵģ¬ÒòΪÕâЩ³ÉÔ±µÄλÖÃÒ²ÐèÒª±»×·×Ù¡£Ò»ÖÖ½â¾ö·½·¨ÊǼòµ¥µØ½ûÖ¹¸ÃÏÄÜ¡£ÕâÑùÓïÑÔµ±È»»á±äµÃ¸ü¼Ó¼òµ¥£¬µ«ÊÇͬʱÓïÑÔÒ²»á±äµÃ¸üÈõ----ÀýÈçÎÒÃǽ«²»ÄÜͨ¹ýÔö³¤ÔªËصĵØÖ·ÖµÀ´±éÀú CLI Êý×飬ÕâÊÇÒòΪ CLI Êý×éÊÇÒ»¸öÒýÓÃÀàÐÍ£¬ÆäÄÚµÄÔªËض¼Î»ÓÚÍйܶÑÉÏ¡£²»ÌṩÕâÑùµÄ¹¦ÄÜÒâζ×Å CLI Êý×齫²»ÄÜÊÊÓÃÓÚ±ê׼ģ°å¿â£¨ STL £©ÖÐµÄ iterator ģʽÒÔ¼°·ºÐÍËã·¨¡£¶ÔÓÚÒ»¸ö C++ ³ÌÐòÔ±À´Ëµ£¬ÕâÊDz»¿É½ÓÊܵġ£

¡¡¡¡Ö§³Ö»ñÈ¡¿ÉÄÜλÓÚÍйܶÑÖеÄÖµÀàÐ͵ĵØַͬÑùÐèÒªÒýÈëÒ»ÖÖ×·×ÙÖ¸Õ룬ÎÒÃdzÆ֮Ϊ׷×ÙÄÚ²¿Ö¸Õ루 tracking interior pointer £©¡£ÁíÍ⣬ÎÒÃÇ»¹Ö§³Ö×·×ÙÒýÓ㨠tracking reference £©ÕâÑùµÄ¸ÅÄî----Ëü¾ßÓÐÀàËƱ¾µØÒýÓõıðÃûÓïÒ壬µ«ÊÇËü»áÔÚ±ØÒªµÄʱºò±» CLI ͸Ã÷µØ¸üС£×îºó£¬ÎÒÃÇ»¹Ö§³ÖÒ»Ö̶ֹ¨Ö¸Õ루 pinning pointer £©µÄ¸ÅÄËü¿ÉÒÔÔÚ¸ÃÖ¸ÕëµÄ×÷Ó÷¶Î§ÄÚ×èÖ¹À¬»øÊÕ¼¯Æ÷Òƶ¯ÆäËùÒýÓõĶÔÏó¡£

¡¡¡¡ÕâЩеķûºÅ¼°Æä±íʾµÄ¸´Ôӵļä½ÓÀàÐÍÊÇÔÚÎÒÃǶÔÍйܶѷ´¸´Ñ§Ï°ºÍÈÏʶ֮ºó²úÉúµÄ¡£Ãæ¶ÔÉú´æÆÚ¶ÌÔݵÄÍйܶѶÔÏó£¬ÎÒÃÇÐèҪijÖÖ¾«Çɵķ½Ê½À´ÈÏʶºÍʹÓÃËüÃÇ£¬ÎÒÃÇÏàÐÅÕâЩ¶îÍâµÄ¼ä½ÓÀàÐÍ¿ÉÒÔ¸ø´ó¼ÒºÜ¶à°ïÖú¡£ÎÒÃǽ«ÔÚ½ñºóµÄרÀ¸ÎÄÕÂÖÐÏêϸÌÖÂÛËüÃÇ¡£

¡¡¡¡ÎÒÃÇÔڴ˶ÔÒ»ÃÅ CLI ÓïÑÔËùÑ¡ÔñµÄµÚ¶þ¸öÉè¼Æ²ãÃæ±íʾÁËÆä¶Ôµ×²ã CLI ʵÏÖÄ£Ð͵ÄÒ»²ãÓ³É䡣ѡÔñʲôÑùµÄÓ³ÉäÈ¡¾öÓڸñà³ÌÓïÑÔ¶¨Î»ÓÚʲôÑùµÄ³ÌÐò¼°³ÌÐòԱģÐÍ¡£µ±ÄãÑ¡ÔñÒ»ÃÅ CLI ÓïÑÔ½øÐбà³ÌµÄʱºò£¬Äãʵ¼ÊÉÏÒ²ÊÇÔÚÑ¡Ôñ×ñ´ÓÒ»ÖÖ³ÌÐòԱģÐÍ¡£ÎÒÃǶÔÓÚ C++/CLI ³ÌÐòÔ±µÄ¶¨Î»ÊÇÄÇЩÀúÁ·½ÏÉîµÄϵͳ³ÌÐòÔ±£¬ÕâЩ³ÌÐòԱͨ³£ËùÃæ¶ÔµÄÈÎÎñÊÇΪ¸ß²ãµÄÉÌÒµÂß¼­Ìṩ»ù´¡ÐԵĹ¹ÔìºÍ¹Ø¼üÐÔµÄÓ¦Óã¬ÕâʱºòËý¾Í±ØÐëҪͬʱ¿¼ÂÇϵͳµÄÀ©Õ¹ÐÔºÍÐÔÄÜ£¬Òò´Ë±ØÐë¶Ôµ×²ã CLI ÓÐÒ»¸öϵͳ¼¶µÄÊӽǡ£

ѧϰ C++/CLI µÄµÚÈý¸öÒªµãÊÇѧϰÄÇЩ·Ç CLI ±¾ÉíËùÖ±½ÓÌṩµÄ¹¦ÄÜÌØÐÔ¡£ÕâÒ²ÊÇÿһÃÅÃæÏò CLI µÄÓïÑÔËùÒªÃæ¶ÔµÄÉè¼ÆÑ¡Ôñ£¬Ò²ÊǸ÷ÖÖ CLI ÓïÑÔÖ®¼äÏ໥Çø·ÖµÄÒ»ÖÖÌåÏÖ¡£

¡¡¡¡ÀýÈ磬 CLI ±¾Éí²¢²»Ö§³Ö¶àÀà¼Ì³Ð (multiple class inheritance £¬¼ò³Æ MCI) £¬¶øÖ»Ö§³Ö¶à½Ó¿Ú¼Ì³ÐºÍµ¥Àà¼Ì³Ð¡£µ« Eiffel ÓïÑÔÔÚÉè¼ÆÆäÃæÏò CLI µÄʵÏÖʱ¾ÍÑ¡ÔñÁËÖ§³ÖÔ´´úÂ뼶µÄ¶àÀà¼Ì³Ð¡£ÕâÐèÒªÒ»ÖÖÇÉÃî¡¢ÉõÖÁÊǸ´ÔÓµÄÉè¼Æ½«Ô´´úÂ뼶µÄ¶àÀà¼Ì³ÐÓ³ÉäΪµ×²ã CLI µÄµ¥Àà¼Ì³ÐÄ£ÐÍ¡£ Eiffel ÓïÑÔµÄÉè¼ÆÈËÔ±ÈÏΪÕâÖÖÓ³Éä¶ÔÓÚ CLI ƽ̨É쵀 Eiffel ³ÌÐòÔ±ÊÇÒ»¸öÀûºÃµÄÔªËØ¡£

¡¡¡¡ÔÚ´Ë C++/CLI µÄµÚÈý¸öÉè¼Æ²ãÃæÉÏ£¬ÎÒÃÇûÓвÉÓöàÀà¼Ì³ÐµÄ·½°¸¡£ÆäÖÐÒ»¸öÔ­ÒòÊÇÎÒÃDz»ÄÜ˵·þ×Ô¼º¶à½Ó¿Ú¼Ì³ÐÄ£ÐÍÓÐÈκβ»¹»¼òµ¥»òÕßÓÅÑŵĵط½¡£ÎÒÃÇûÓÐ×ã¹»µÄ¾­ÑéÀ´È·¶¨ÄÄÖÖ·½°¸¾ø¶ÔµÄÓÅÐ㣬µ«ÊÇÎÒµÄÖ±¾õ¸æËßÎÒ¶àÀà¼Ì³Ð£¨ MCI £©ÊÇÒ»¸öËÀºúͬ¡£ÎÒÃÇÔÚ´ËÉè¼Æ²ãÃæÉϵÄÖ÷Òª¹Ø×¢µãÔÚÓÚΪÄÇЩ CLI ±¾ÉíËùǷȱµÄµØ·½ÌṩһЩ¶îÍâµÄ½â¾ö·½°¸£¬ÎÒÃÇÖ÷Òª¼¯ÖÐÔÚÒÔÏÂÈý¸ö·½Ã棺

¡¡¡¡1£® ΪijЩ CLI ÒªÇóÊÖ¶¯¸ÉÔ¤µÄµØ·½ÌṩһÖÖ×Ô¶¯»¯µÄ½â¾ö·½°¸£¬ÀýÈçÈ·¶¨ÐÔÖÕÖ¹»¯²Ù×÷£¨ deterministic finalization £©ºÍÏ¡ÓÐ×ÊÔ´ÊÍ·Å¡£

¡¡¡¡2£® ÌṩһЩÌØÊâµÄÀà³ÉÔ±º¯Êý----ÀýÈ翽±´¹¹ÔìÆ÷ºÍ¿½±´¸³Öµ²Ù×÷·û£¬ÒÔ¼°ÔÚ CLI Ö±½ÓÖ§³ÖµÄ²Ù×÷·ûµÄ»ù´¡ÉÏÔÙΪһЩ²Ù×÷·ûÌṩһЩÀ©Õ¹Ö§³Ö----ÀýÈçÓÃÀ´Ö§³Öº¯Êý¶ÔÏó£¨ function object £©Éè¼ÆģʽµÄµ÷ÓòÙ×÷·û¡°£¨£©¡±¡£

¡¡¡¡3£® ÌṩһÖÖ¾²Ì¬µÄ²ÎÊý»¯»úÖÆÀ´Ö§³ÖÉè¼ÆÊÊÓÃÓÚ CLI ÀàÐ͵ıê׼ģ°å¿â£¨ STL £©£¬ÕâÊÇÒòΪ CLI ÖеķºÐÍ»úÖÆÔÚÎÒÃÇÀ´¿´¶ÔÓÚµ±´úµÄ²ÎÊý»¯Éè¼ÆÊDz»¹»µÄ----ËäÈ»ÎÒÃÇÒ²Ö§³ÖËüÃÇ¡£

¡¡¡¡ÒÔÉϼ¸µãÔÚÎÒÃǵÄϵÁÐרÀ¸Öж¼½«ÓÐÏà¹ØµÄÌÖÂÛ¡£ÌرðµØ£¬ÎÒÃǽ«»áÏêϸ²ûÊÍ C++/CLI ÖеÄÄ£°åºÍ·ºÐÍ»úÖÆ¡£

¡¡¡¡C++/CLI µÄµÚËĸöÉè¼Æ²ãÃæÔÚÓÚËüÑ¡ÔñÁË¡°¼¯³É¡±¶ø·Ç¡°Ìæ»»¡±µÄ²ßÂÔ£¬ÕâÊÇ C++ ÒÔ¼°Ò»Ð©ÓïÑÔËù¶ÀÓеģ¬¶øÆäËûһЩÓïÑÔÔòûÓÐÕâÑù×ö£¬ÀýÈç Visual Basic ²ÉÈ¡µÄ¾ÍÊÇ¡°Ìæ»»¡±µÄ²ßÂÔ¡£Ò»¸öºÏ·¨µÄ C++ ³ÌÐòÊÇ¿ÉÒÔ˳Àûͨ¹ý C++/CLI ±àÒ룬²¢ÇÒ¿ÉÒÔÕý³£ÔËÐеġ£ÎÒÃÇÈÏΪÕâ¶ÔÓÚÎÒÃǵijÌÐòÔ±ÊÇÒ»Ïî»ù±¾µÄÐèÇó¡£

¡¡¡¡Ì¸µ½ C++/CLI µÄµÚËĸöÉè¼Æ²ãÃ棬Õ⾿¾¹ÊÇʲôÒâ˼ÄØ£¿Ëü±íʾÎÒÃÇ¶Ô C++/CLI ÓïÑԹ淶ºÍ ISO-C++ Ëù×öµÄÉîÈëµÄ¼¯³É¡£ÀýÈ磬³ýÁËÎÒÃÇÀ©Õ¹Ö§³Ö¼¯ºÏʹÆäÒ²ÊÊÓÃÓÚͳһµÄ CLI ÀàÐÍϵͳ£¬±í´ïʽÆÀ¹ÀµÄ±ê׼ת»»¼¯ºÏÓëÖØÔغ¯ÊýµÄ±æÎö¶¼ºÍ ISO-C++ µÄÏàͬ¡£µ±ÎÒÃÇÒýÈëÄ£°åºÍ¶à¼Ì³Ð»úÖÆʱ£¬ÎÒÃÇÒ²Ó¦ÓÃÁËͬÑùµÄÀ©Õ¹²ßÂÔ¡£ÕâЩ¶¼ÊÇÔÚÓïÑÔÖÐÉÔÏÔ³éÏóµÄ²¿·Ö£¬ÔÚijÖ̶ֳÈÉÏÎÒÃÇÒѾ­Ê¹ËüÃǵÄÐÐΪ±äµÃ¸ü¼ÓÖ±¹Û£¬Ãâ³ýÁ˳ÌÐòÔ±ÉîÈëË㷨ϸ½ÚµÄÐèÒª¡£µ«ÎÒÃÇÈÔ»áÔÚϵÁÐרÀ¸Öл¨·Ñ±ÊÄ«¹ØעһЩÖ÷ÒªµÄ±ä»¯£¬ÀýÈç¶Ô×ÖÃæ³£Á¿£¨ literal £©×Ö·û´®µÄ´¦Àí¡£

¡¡¡¡ÔÚ C++/CLI δÀ´µÄ°æ±¾ÖУ¬ÎÒÃÇÏ£ÍûΪ±¾µØÀàÐÍºÍ CLI ÀàÐÍÌṩ¸üΪÎÞ·ìµÄ¼¯³É¡£ÔÚÄ¿Ç°µÄʵÏÖÖУ¬ÈÔÈ»´æÔÚÐí¶à²»ÄÜ¿çÔ½µÄ±ÚÀÝ¡£ÀýÈ磬ÎÒÃÇÏÖÔÚ»¹²»ÄÜÖ±½ÓÔÚÒ»¸ö CLI ÀàÖÐÉùÃ÷Ò»¸ö±¾µØÀàµÄʵÀý¶ÔÏó£»Ïà·´£¬ÎÒÃDZØÐëÉùÃ÷Ò»¸öÖ¸ÏòÄǸö±¾µØ¶ÔÏóµÄÖ¸Õ룬ȻºóÔÚ CLI ÀàµÄ¹¹ÔìÆ÷ / Îö¹¹Æ÷¶ÔÖд¦Àí¶ÔËüµÄÄÚ´æ·ÖÅäÓëÊÍ·Å¡£ÎÒÃÇÏ£Íû½«À´Äܹ»Í¸Ã÷µØ´¦ÀíËüÃÇ¡£ÀàËƵأ¬Èç¹û¿ÉÒÔ·½±ãµØ±àдÏÂÃæµÄ´úÂë¾Í¸üºÃÁË£º

N^ n = gcnew N;

¡¡¡¡R* pn = new R;

¡¡¡¡¼´½«Ò»¸ö±¾µØÀà͸Ã÷µØ·ÅÔÚÀ¬»øÊÕ¼¯¿ØÖƵÄÍйܶÑÖУ¬ÒÔ¼°½«Ò»¸ö CLI ÒýÓÃÀàÐÍ͸Ã÷µØ·ÅÔÚ±¾µØ¶ÑÖУ¬²¢Ê¹ËüÃÇÕý³£ÔËÐС£ÕâЩÊÇÎÒÃǶÔÓÚ C++/CLI δÀ´µÄһЩÉèÏëºÍÔ¸¾°¡£Ëæ×ÅÕâЩÉèÏëµÄʵÏÖ£¬ÎÒÃÇÒ²»áÔÚÎÒÃǵÄרÀ¸ÖÐÌÖÂÛËüÃÇ¡£

¡¡¡¡×îºó£¬ÔٻشðÒ»¸ö´ó¼Ò¾­³£Îʵ½µÄÒ»¸öÎÊÌ⣬¡°ÎÒΪʲôҪѧϰ C++/CLI ¡±£¿Ê×ÒªµÄÔ­ÒòÊÇ C++/CLI ½«»áΪÄã½øÈë CLI Ëù±íʾµÄ¶¯Ì¬×é¼þ±à³ÌÄ£ÐÍÁìÓòÌṩһÕŵÚÒ»µÈµÄÈë¿ÚÇ©Ö¤¡£Èç¹ûÄãÏñÎÒÒ»ÑùÈÏΪÕ⽫³ÉΪԽÀ´Ô½ÖØÒªµÄÒ»ÖÖ±à³ÌÄ£ÐÍ£¬²¢ÇÒÈç¹ûÄãÊÇÒ»¸öÀúÁ·½ÏÉîµÄ³ÌÐòÔ±£¬ÄÇô C++/CLI ¾ÍÊÇÄãÏëÒªµÄÒ»¸öÓïÑÔ¹¤¾ß¡£Èç¹ûÄ㲻ϲ»¶Ä³Ð©µØ·½£¬»òÕß·¢ÏÖijЩ¶«Î÷ºÜÄѱí´ï£¬ÄÇôÇë¸æËßÎÒÃÇ¡£ÎÒÃÇ´ú±í×ÅÒ»¸ö¶¯Ì¬±à³ÌÉçÇø£¬ C++/CLI Ò²»á³ÖÐø²»¶ÏµØÇ°½ø¡£

¡¡¡¡ÔÚ C++/CLI ֮ǰ£¬Èç¹ûÎÒÃÇÏ£Íû»òÕßÐèÒªÔÚ CLI Ëù±íʾµÄ¶¯Ì¬±à³ÌÁìÓò¹¤×÷£¬ÄÇôÎÒÃÇÖ»ÄÜ·ÅÆúʹÓà C++ [ Òë×¢ 3] £¬ÕâÒâζ×ÅÎÒÃÇͬʱ·ÅÆúÁËÎÒÃÇÏÖ´æµÄ´úÂë¿âºÍ±àÂë¾­Ñé¡£ÓÐÁË C++/CLI Ö®ºó£¬ÎÒÃǾÍÓµÓÐÁËÒ»ÌõÑØ×Å C++ ÏòÉϵÄÒÆֲ·¾¶¡£ÕâÊÇѧϰ C++/CLI µÄµÚÒ»¸öÔ­Òò¡£

¡¡¡¡Ñ§Ï° C++/CLI µÄµÚ¶þ¸öÔ­ÒòÔÚÓÚËüÔÊÐíÎÒÃÇ·ÃÎÊÕû¸ö CLI ¿ò¼ÜÀà¿â£¬°üÀ¨Óû§½çÃ棬Ị̈߳¬ÍøÂ磬 XML £¬ ADO.NET £¬ ASP.NET £¬ÒÔ¼° Web ·þÎñÕâ¸ö¿í¹ãÓÕÈ˵ÄÊÀ½ç¡£ÁíÍ⣬ÔÚ¼´½«ÍƳöµÄ WinFX ÖУ¬Ò»¸ö·â×°ÁËÕû¸ö²Ù×÷ϵͳµÄÀà¿âÌåϵ£¨°üÀ¨Ó¦ÓóÌÐò¼°ÆäÖ´Ðпռä [ Òë×¢ 4] £©Ò²»á±»ÊÕ±àÔÚ CLI ÃÅÏ¡£

¡¡¡¡[ Òë×¢ 1 ] £ºÔÚ·­Òë Stan Lippman ÏÈÉúÕâƪÎÄÕµĹý³ÌÖУ¬ÎÒ·¢ÏÖ Stan ÔÚÓöµ½µÚÈýÈ˳ƵijÌÐòԱʱ£¬×ÜÊÇʹÓá° She ¡±¡¢¡° Her ¡±ÕâÑùµÄÅ®ÐÔ´ú´Ê£¬Ò»¿ªÊ¼ÎÒºÜÀ§»ó£¬ÒòΪ¸Ð¾õºÜ²»·ûºÏÔĶÁÏ°¹ß£¬µ«ÎÒ×ܾõµÃ Stan ÊÇÓÐÒâΪ֮¡£×îºóÎÒ¾ö¶¨Ïò Stan ѯÎÊÕâÑù×öµÄÓÃÒâ¡£¹û²»ÆäÈ»£¬ Stan µÄ»Ø´ðÊÇ´ó¼ÒÏ°¹ßÓá° He ¡±ÊÇÒ»ÖÖÄÐÐÔÖÁÉÏÖ÷ÒåÕßµÄÌåÏÖ£¬ºÃÏñÒ»ÌáÆð³ÌÐòÔ±£¬´ó¼Ò¶¼ÈÏΪÊÇÄÐÐÔ¡£Ëû²¢²»ÈÏͬÕâÑùµÄ¿´·¨£¬ÌØÒâÖöÎÒÒªÔÚ·­ÒëµÄÎı¾Öб£Áô¡° She ¡±ºÍ¡° Her ¡±µÄÓÃÒ⣬ÒòΪËû·´¶ÔÄÇÖÖÀÏÌ׵Ĺ۵㡣ͬʱ»¹¾Ù³öÁËÁ½Î»¼ÆËã»úÁìÓòµÄÅ®½Ü£ºÈí¼þ½çµÄÏÈÇýÖ®Ò»¡¢»ã±àÓïÑԵĴ´Ê¼ÈË Grace Hopper ²©Ê¿£¬ÒÔ¼° Smalltalk ÁìÓòµÄÖØÁ¿¼¶×¨¼Ò Adele Goldberg Ůʿ¡£Ï£Íû Stan µÄÁ¼¿àÓÃÐÄÄܹ»¹ÄÀø¸ü¶àµÄÅ®ÐÔ³ÌÐòÔ±ÅóÓÑÀ´ÔĶÁÎÒÃÇÕâ¸öרÀ¸ J ? back

¡¡¡¡[ Òë×¢ 2 ] £ºµ¥Ò»µÄ¸ù»ùÀàΪ·´ÉäÌṩ֧³Ö»úÖƵÄÀíÓÉÔÚÓÚ·´Éä×ÜÐèҪijÖÖÐÎʽµÄ handle À´Î¬»¤ÀàÐÍÐÅÏ¢¡£±ÈÈçÔÚ ISO-C++ ÖУ¬ÕâÑùµÄ handle ÐèÒªÐé±íÀ´Ö§³Ö£¬Èç¹ûûÓÐÐé±í£¬¾Í²»ÄÜÖ§³Ö RTTI £¬ÕâʹµÃ ISO-C++ ¶Ô·´ÉäµÄÖ§³Ö±È½ÏÈõ¡£µ« CLI ²ÉÓÃÔÚÒ»¸ö¹«¹²µÄ object header ÖзÅÈëÒ»¸ö handle À´Î¬»¤ÀàÐÍÐÅÏ¢£¬ÇÉÃîµØ½â¾öÁËÔËÐÐʱÀàÐÍ·¢ÏÖµÄÎÊÌâ¡£Õâ¸ö¹«¹²µÄ object header ×îºó¾Í»áµ¼ÖÂËùÓеÄÀàÐͶ¼ÓÐÒ»¸ö¸ù»ùÀà----Èç¹û²»ÊÇ¿ÌÒâÒþ²Ø¸Ã¸ù»ùÀàµÄ»°¡£ back

¡¡¡¡[ Òë×¢ 3 ] £º×÷ÕßÕâÀïûÓп¼ÂÇ Managed C++ ÊÇÒòΪ C++/CLI ÊÇ Managed C++ µÄµÚ¶þ°æ¡£ back

¡¡¡¡[ Òë×¢ 4 ] £ºÕâÀïµÄ¡°Ö´Ðпռ䡱ָµÄÊÇÓ¦ÓóÌÐòÔËÐÐʱµÄһЩ»ù´¡¹¹Ô죬Èç³ÌÐò¼¯¡¢Ó¦ÓóÌÐòÓòµÈ¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ