.NET Framework FAQ ×÷ÕßAndy McMullan ÒëÕß ÈÙÒ« ¸üÐÂÈÕÆÚ£º 2002-09-10 ÕâÆªFAQÊÔͼ»Ø´ð¹ØÓÚ.NET Framework»ù±¾ÔÀíµÄһЩ³£¼ûÎÊÌ⡣˵µ½»ù±¾ÔÀí£¬ÎÒÊÇÖ¸.NET Frameworkµ×²ãÔË×÷»úÖÆµÄ¾ßÌåϸ½Ú£¬ÌÖÂÛÖ÷Ìâ°üÀ¨Åä¼þ£¨assemblies£©¡¢À¬»øÊÕ¼¯»úÖÆ¡¢°²È«ÐÔ¡¢COM»¥²Ù×÷ÒÔ¼°Ô¶³Ì»¯£¨remoting£©µÈ£¬²¢º¸ÇÀà¿â×î³£ÓõIJ¿·Ö¡£ÖÁÓÚ.NET FrameworkµÄÆäËü·½Ã棬±ÈÈçASP.NET¡¢ADO.NETºÍWinForms£¬²»ÔÚ±¾FAQÌÖÂÛ·¶Î§¡£ ÕâÆªFAQµÄÁé¸ÐÀ´×ÔÓÚDOTNETÓʼþÁÐ±í¡£¼ÙÈçÄ㻹ûÓгÉΪÕâ¸öÓʼþÁбíµÄ³ÉÔ±£¬¿ÉÒԴӴ˼ÓÈ룺http://discuss.develop.com/dotnet.html¡£ÔÚÕâ¶ù»¹¿ÉÒÔ²éÔÄÓʼþÁÐ±í´æµµÎļþ¡£ ¼ÙÈçÄãÓÐÈÎºÎÆÀ×¢¡¢½¨Òé¡¢¸üÕý»òÅúÆÀ£¬Çë¸øÎÒдÐÅ£¨andy@andymcm.com£©¡£ ¼ÙÈçÄã¶ÔC#¸ÐÐËȤ£¬ÎªÊ²Ã´²»¿´¿´Îҵġ°C# FAQ for C++ programmers¡±ÄØ£¿£¨Ó¢ÎÄ£ºhttp://www.andymcm.com/csharpfaq.htm£¬ÖÐÎÄ£ºhttp://www.royaloo.com/articles/articles_2002/CSharpFAQ.htm£© ÉùÃ÷1£ºÕâÆªFAQ²»¹ýÊÇÎÒ¶Ô´ÓÐÎÐÎɫɫµÄÇþµÀËѼ¯µ½µÄÐÅÏ¢µÄ¸öÈ˲ûÊö¶øÒÑ£¬À´Ô´°üÀ¨DOTNETÓʼþÁбíÒÔ¼°Î廨°ËÃŵÄ΢ÈíÎĵµ¡£ÕâЩ´ð°¸²¢·Ç¶àôµÃÍ걸£¬ÉõÖÁ¿ÉÄܲ»ÍêÈ«ÕýÈ·¡£¼´Ê¹ÕâЩ´ð°¸½ñÌìÊÇÕýÈ·µÄ£¬Ëµ²»¶¨Ã÷Ìì¾Í²»ÔÙÈç´Ë¡£ ÉùÃ÷2£ºÕâÆªFAQºÍDOTNETÓʼþÁбí»òDevelopmentor£¨°Ñ³ÖÕâ¸öÁбíµÄ¹«Ë¾£©»ò΢ÈíûÓÐÈκÎÕýʽÁªÏµ¡£ ÐÞ¶©ÀúÊ· 2002-07-09 ¼ÓÈëÐòÁл¯Ò»½Ú 2002-06-07 ÐÞÕû¡°×ÊÔ´¡±²¿·Ö£¬¼ÓÈëеÄÊé¼®ÍÆ¼öºÍWeblogsÖ÷Ìâ 2002-01-17 ºÜСµÄ¸üУ¬ÒÔ·´Ó³°æ±¾1µÄÀ´ÁÙ 2001-08-20 ¸üÐÂËùÓдúÂëÑùÀý£¬Ê¹ÆäÍêÈ«¼æÈÝÓÚBeta 2¡£ 2002-06-28 ºÜСµÄ¸üУ¬ÒÔ·´Ó³Beta2µÄµ½À´¡£ 2000-11-18 Ïò¡°Àà¿â¡±Ò»½Ú£¬¼ÓÈë¡°¸ú×Ù¡±×ÓС½Ú 2000-11-13 ΪBeta1µÄµ½À´¶ø¸üР2000-11-09 ×ÅÊÖ±àд¡°Àà¿â¡±Ò»½Ú 2000-11-03 ¼ÓÈë¡°IL¡±Ò»½Ú 2000-10-14 ¼ÓÈë¡°´úÂë·ÃÎʰ²È«¡±Ò»½Ú 2000-08-29 ¿ªÊ¼Î¬»¤¡°ÐÞ¶©ÀúÊ·¡± 2000-07-29 ÖÁ 2000-08-28 ÔÓÆßÔӰ˵ĸüУ¨Ã»×÷¼Ç¼£© 2000-07-29 ¹«²¼±¾FAQµÚÒ»°æ ÄÚÈÝ 1.2 .NETÖ»ÊÊÓÃÓÚ¹¹½¨webÕ¾µãÂ𣿠1.5 ÎÒ¿ÉÒÔʹÓÃʲôÑùµÄ¹¤¾ßÀ´¿ª·¢.NETÓ¦Óã¿ 1.6 .NET FrameworkÔËÐÐÓÚºÎÖÖÆ½Ì¨Ö®ÉÏ£¿ 1.7 .NET FrameworkÖ§³ÖÄÄЩÓïÑÔ£¿ 1.8 .NET Framework½«»á±ê×¼»¯Â𣿠2.6 ÔÚ.NET»·¾³Ï£¬¡°Íйܣ¨managed£©¡±Ò»´ÊµÄº¬ÒåÊÇ£¿ 2.7 ʲôÊÇ·´É䣨reflection£©£¿ 3.3 ˽ÓÐÅä¼þ£¨private assembly£©ºÍ¹²ÏíÅä¼þ£¨shared assembly£©Ö®¼äÓÐÊ²Ã´Çø±ð£¿ 3.5 Åä¼þµÄ°æ±¾Ðµ÷»úÀíÊÇÔõÑùµÄ£¿ 4. Ó¦ÓÃÓò£¨Application Domains£© 4.3 ÎÒÄܱàд×Ô¼ºµÄ.NETËÞÖ÷£¨.NET host£©Â𣿠5. À¬»øÊÕ¼¯£¨Garbage Collection£© 5.2 µ±¶ÔÏó×îºóÒ»¸öÒýÓñ»½â³ýʱ£¬ËüÒ²²¢²»×ÜÊÇÁ¢¼´±»Ïú»Ù£¬ÕæµÄÂ𣿠5.3 Ϊʲô.NETÔËÐÐʱ²»Ìṩȷ¶¨ÐÔµÄÏú»Ù»úÖÆ£¿ 5.4 ȱ·¦È·¶¨ÐÔµÄÏú»Ù»úÖÆÔÚ.NETÖгɸöÎÊÌâÂ𣿠5.5 ·ÇÈ·¶¨ÐÔÏú»Ù»úÖÆ¶Ô´ÓÍйܴúÂ루managed code£©ÖÐʹÓÃCOM¶ÔÏóÓÐÓ°ÏìÂ𣿠5.6 ÎÒÌý˵Ӧ¸Ã±ÜÃâʹÓÃFinalize·½·¨£¬ÎÒÓ¦¸ÃÔÚÎÒµÄÀàÀïʵÏÖFinalize·½·¨Â𣿠5.7 ÎÒÄܶÔÀ¬»øÊÕ¼¯Ëã·¨×÷Щ¿ØÖÆÂ𣿠5.8 ÎÒÔõô²ÅÄÜ¿´³öÀ´À¬»øÊÕ¼¯Æ÷ÕýÔÚ¸ÉЩʲôÊ£¿ 6.2 .NET Framework¶ÔÐòÁл¯ÓÐÄÚ½¨Ö§³ÖÂ𣿠6.3 ÎÒÏëÐòÁл¯ÎÒµÄÀàµÄʵÌ壬ÎÒÓ¦¸ÃʹÓà XmlSerializer¡¢SoapFormatterºÍBinaryFormatterÖеÄÄÄÒ»ÖÖ£¿ 6.5 ΪʲôXmlSerializerÕâôÂý£¿ 6.6Ϊʲôµ±ÎÒÊÔͼÐòÁл¯Ò»¸öÉ¢ÁÐ±í£¨Hashtable£©Ê±±¨´í£¿ 6.7 XmlSerializerÅ׳öÁËÒ»¸öÒ»°ãÐԵĴíÎ󣺡°ÔÚ·´ÉäMyClassʱ³ö´í¡±£¬ÎÒÔõô²ÅÄܲéÃ÷³öÁËʲôÎÊÌ⣿ 7.2 ÎÒ¿ÉÒÔ´´½¨ÎÒ×Ô¼ºµÄÔªÊý¾ÝÌØÐÔ£¨metadata attributes£©Â𣿠7.3 ÎÒ¿ÉÒÔ´´½¨ÎÒ×Ô¼ºµÄÉÏÏÂÎÄÌØÐÔ£¨context attributes£©Â𣿠8. ´úÂë·ÃÎʰ²È«£¨Code Access Security£© 8.1 ʲôÊÇ´úÂë·ÃÎʰ²È«£¨CAS£©£¿ 8.3 ËÀ´¶¨ÒåCAS´úÂë×飨code groups£©£¿ 8.4 ÎÒÔõôÀ´¶¨ÒåÎÒ×Ô¼ºµÄ´úÂë×飿 8.5 ÎÒÔõô¸ü¸Ä´úÂë×éµÄȨÏÞ¼¯£¨permission set£©£¿ 8.7 ÎÒÓöµ½ÁËһЩCASÂé·³£¬ÎÒÈçºÎ²ÅÄÜÕï¶ÏÊÇʲôµØ·½³öÁ˲î´í£¿ 8.8 ÎÒ¶ÔËùÓÐÕâЩCASÍæÒⷳ͸ÁË£¬ÎÒÄܽûÓÃËüÂ𣿠9. ÖмäÓïÑÔ£¨Intermediate Language£¬IL£© 9.2 ÄÜ´ÓIL¡°·´Ïò¹¤³Ì¡±£¨reverse-engineered£©³öÔ´´úÂëÀ´Â𣿠9.3 ÎÒÔõô²ÅÄÜ·ÀÖ¹ÎҵĴúÂë±»´ÓIL¡°·´Ïò¹¤³Ì¡±³öÀ´£¿ 9.5 ÎÒÄÜÔÚILÖÐ×ö²»ÄÜÔÚC#ÖÐ×öµÄÊÂÇéÂ𣿠10.4 ÎÒÄÜÔÚ.NET³ÌÐòÖÐʹÓÃCOM×é¼þÂ𣿠10.5 ÎÒÄÜÔÚCOM³ÌÐòÖÐʹÓÃ.NET×é¼þÂ𣿠10.6 ÔÚ.NETÊÀ½çÀATL³ÉÁ˶àÓàµÄ¶«Î÷Â𣿠11.1 .NET remoting£¨Ô¶³Ì»¯£©µÄ¹¤×÷»úÀíÊÇÔõÑùµÄ£¿ 11.2 ÎÒÔõô²ÅÄÜ´Ó.NET³ÌÐòÖзÃÎÊWin32 API£¿ 12.1.3 ÎÒÔõÑù¶Á/д¶þ½øÖÆÎļþ£¿ 12.3.2 ÎÒÔõÑùʹÓôúÀí£¨proxy£©£¿ 12.5.4 ÎÒÔõÑùʹÓÃÏ̳߳أ¨Thread pool£©£¿ 12.5.5 ÎÒÔõô²ÅÄÜÖªµÀÏ̳߳ع¤×÷Ïwork item£©Ê²Ã´Ê±ºò½áÊøÁË£¿ 12.5.6 ÎÒÔõô·ÀÖ¹¶ÔÊý¾ÝµÄ²¢·¢·ÃÎÊ£¿ 12.6.1 ¶Ô¸ú×Ù/ÈÕÖ¾£¨tracing/logging£©ÓÐÄÚ½¨Ö§³ÖÂ𣿠12.6.2 ÎÒÄܽ«¸ú×Ù½á¹ûÖØ¶¨Ïòµ½ÎļþÂ𣿠ºÜÄÑÓÃÒ»¾ä»°ËµÇå³þ¡£°´ÕÕ΢ÈíµÄ˵·¨£¬.NETÊÇÒ»¸ö¡°¸ïÃüÐÔµÄÐÂÆ½Ì¨£¬¹¹½¨ÓÚ¿ª·ÅµÄInternetÐÒéºÍ±ê×¼Ö®ÉÏ£¬²¢Ìṩ¹¤¾ßºÍ·þÎñ£¬´Ó¶ø¿ÉÒÔеķ½Ê½ÈںϼÆËãºÍͨѶ¡£¡± ¸üʵÔÚһЩµÄ¶¨ÒåÓ¦¸ÃÊÇÕâ¸öÑù×Ó£º.NETÊÇÒ»¸öÓÃÓÚ¿ª·¢ºÍÔËÐÐÈí¼þÓ¦ÓõÄл·¾³¡£ÌØÉ«ÓУº¿ª·¢»ùÓÚWebµÄ·þÎñ¸ü¼ÓÈÝÒ×£»¾ßÓзḻµÄ±ê×¼ÔËÐÐʱ·þÎñ£¬¿ÉÒÔ±»²»Í¬³ÌÐòÓïÑÔ±àдµÄ×é¼þËùʹÓ㻾ßÓпçÓïÑԺͿç»úÆ÷»¥²Ù×÷ÄÜÁ¦¡£ ×¢Ò⣬µ±ÊõÓï¡°.NET¡±±»ÓÃÓÚ´ËFAQʱ£¬ËüָֻеÄ.NETÔËÐÐʱÒÔ¼°ÓëÖ®Ïà¹ØµÄ¼¼Êõ£¬ÓÐʱ³ÆÖ®Îª¡°.NET Framework¡±¡£ÕâÆªFAQ²»É漰΢ÈíÕýÍùÉÏÌù.NETÃûÍ·µÄÈÎºÎÆäËüÎ廨°ËÃŵÄÏÖÓеĺÍеIJúÆ·Óë¼¼Êõ£¨±È·½¡°SQL Server.NET¡±£©¡£ 1.2 .NETÖ»ÊÊÓÃÓÚ¹¹½¨webÕ¾µãÂ𣿠·ÇÒ²¡£ÌÈÈôÄã±àдÈκÎWindowsÈí¼þ£¨Ê¹ÓÃATL/COM¡¢MFC¡¢VBÉõÖÁÊÇÔÉúµÄWin32 API£©£¬.NET¿ÉÒÔΪÄãĿǰÐÐÊ·½Ê½Ìṩһ¸ö¿ÉÐеÄÌæ´ú·½°¸£¨»òÕß˵ÊÇÒ»ÖÖ¶îÍâµÄ°ì·¨£©¡£µ±È»ÁË£¬¼ÙÈçÄãÔÚ¿ª·¢WebÕ¾µãµÄ»°£¬.NETÓÐÐí¶à¿ÉÒÔ¹´ÆðÄãÐËȤµÄ¶«Î÷ ¡ª ²»µ¥µ¥ÊÇASP.NET¡£ ±È¶û¡¤¸Ç´ÄÔÚ2000Äê6ÔÂ22ÈÕ¾ÙÐеġ°ÂÛ̳2000¡±ÉÏ·¢±íÁËÒ»¸öÑݽ²£¬Ãè»æÁË.NETÃÀ¾°¡£ÔÚ2000Äê7ÔÂÕÙ¿ªµÄÖ°Òµ¿ª·¢Õß´ó»áÆÚ¼ä£¬¾ÙÐÐÁËÐí¶à¹ØÓÚ.NET¼¼ÊõµÄ»áÒé¡£Óë»á´ú±íÃÇ»¹Áìµ½Á˰üº¬ÓÐ.NET framework/SDKºÍVisual Studio.NETÔ¤ÀÀ°æµÄ¹âÅÌ¡£ SDK 1.0ºÍÔËÐÐʱµÄ×îÖհ湫¿ª·¢ÐÐÓÚ̫ƽÑó±ê׼ʱ¼ä2002Äê1ÔÂ15ÈÕÏÂÎç6µã×óÓÒ£¬Óë´Ëͬʱ£¬Visual Studio.NET×îÖÕ°æÒ²ÏòMSDN¶©»§¿ªÊ¼·¢ÊÛ¡£ 1.5 ÎÒ¿ÉÒÔʹÓÃʲôÑùµÄ¹¤¾ßÀ´¿ª·¢.NETÓ¦Óã¿ Óкܶà¿ÉÓù¤¾ß£¬ÏÂÃæÒÔ¼Û¸ñµÝÔö˳Ðò¼ÓÒÔÃèÊö£º .NET Framework SDK£ºSDKÊÇÃâ·ÑµÄ£¬°üÀ¨C++¡¢C#ºÍVB.NETÃüÁîÐбàÒëÆ÷£¬ÒÔ¼°Ðí¶àÆäËü¸¨Öú¿ª·¢¹¤¾ß£¨Òë×¢£ºÓ¡ÏóÖв¢²»°üº¬C++ÃüÁîÐбàÒëÆ÷£©¡£ ASP.NET Web Matrix£ºÕâÊÇÒ»¸öÀ´×Ô΢ÈíµÄÃâ·ÑASP.NET¿ª·¢»·¾³¡£³ýÁËGUI¿ª·¢»·¾³Í⣬ÏÂÔØÎļþÖл¹°üÀ¨Ò»¸ö¼òµ¥µÄWeb·þÎñÆ÷£¬¿ÉÒÔÓÃÀ´´úÌæIIS×÷ΪASP.NETÓ¦ÓõÄËÞÖ÷£¨host£©¡£ÕâΪWindows XP¼ÒÍ¥°æÓû§´ò¿ªÁËASP.NET¿ª·¢Ö®ÃÅ ¡ª Õâ¸ö°æ±¾µÄWindows²»ÄÜÔËÐÐIIS¡£ ΢ÈíVisual C# .NET±ê×¼°æ£ºÕâÊÇÒ»¸öÁ®¼ÛµÄ£¨´óÔ¼100ÃÀÔª×óÓÒ£©Visual Studio.NET°æ±¾£¬½öÏÞÓÚÒ»ÖÖÓïÑÔ£¬²¢ÇÒÖ»ÓÐÓÐÏÞµÄÏòµ¼Ö§³Ö£¬±È·½Ëµ£¬Ã»ÓÐÌṩ¶ÔÀà¿â»ò×Ô¶¨ÒåUI¿Ø¼þµÄÏòµ¼Ö§³Ö¡£Ëü¶ÔÓÚ³õѧÕßѧϰÊÇÓÐÓõ쬶ÔÓÚÓб¾ÊÂÔÚȱ·¦Ïòµ¼µÄÇé¿öϽøÐпª·¢µÄ»úÁé¹íÀ´Ëµ£¬Ò²ÊÇÓÐÒâÒåµÄ¡£³ýÁËC#°æ£¬»¹ÓÐVB.NETºÍC++°æ¡£ ΢ÈíVisual Studio.NETרҵ°æ£º¼ÙÈçÄãÓÐÒ»¸öVisual Studio 6.0ÊÚȨ£¬Äã¾Í¿ÉÒÔ»ñµÃÉý¼¶°æ¡£ÔÚдÕâЩÎÄ×ÖµÄʱºò£¨2002Äê6Ô£©£¬Î¢ÈíÕýÔÚ¶ÔÉý¼¶°æÌṩ300ÃÀÔªµÄÓʼÄÕÛ¿Û£¬Òò´Ë£¬ÕâÊÇÒ»¸öÏ൱»®ËãµÄÂòÂô¡£Visual Studio.NET°üÀ¨Á˶ÔËùÓÐ΢ÈíÓïÑÔ£¨C#¡¢C++¡¢VB.NET£©µÄÖ§³Ö£¬Ëü»¹°üº¬¹ã·ºµÄÏòµ¼Ö§³Ö¡£ λÓÚ¡°¼Û¸ñ¹âÆ×¡±×î¸ß¶ËµÄÊÇVisual Studio.NETÆóÒµ°æºÍÆóÒµ¼Ü¹¹Ê¦°æ¡£ËüÃÇÌṩÁ˶îÍâµÄ¹¦ÄÜ£¬ÀýÈçVisual Sourcesafe£¨ÓÃÓÚ°æ±¾¿ØÖÆ£©ºÍÐÔÄÜÓë·ÖÎö¹¤¾ß¡£¿Éµ½Õâ¶ù²ì¿´Visual Studio.NET¹¦ÄܱȽϣºhttp://msdn.microsoft.com/vstudio/howtobuy/choosing.asp¡£ 1.6 .NET FrameworkÔËÐÐÓÚºÎÖÖÆ½Ì¨Ö®ÉÏ£¿ ÔËÐÐʱ֧³ÖWindows XP¡¢Windows 2000¡¢NT4 SP6aºÍWindows ME/98£¬²»Ö§³ÖWindows 95¡£FrameworkµÄijЩ×é³É²¿·Ö£¬²¢²»ÊÇÔÚËùÓÐÆ½Ì¨É϶¼Äܹ¤×÷£¬±È·½Ëµ£¬ASP.NETÖ»ÄÜÔËÐÐÓÚWindows XPºÍWindows 2000ÉÏ£¬Windows 98/ME²»ÄÜÓÃ×÷¿ª·¢»·¾³¡£ Windows XP¼ÒÍ¥°æ²»Ö§³ÖIIS£¬Òò´ËËü²»ÄÜÓÃÀ´×÷ΪASP.NETµÄËÞÖ÷¡£²»¹ý£¬ASP.NET Web Matrix Web·þÎñÆ÷£¬¿ÉÒÔÔËÐÐÓÚXP¼ÒÍ¥°æÉÏ¡£ MonoÏîÄ¿ÊÔͼÔÚLinuxÉÏʵÏÖ.NET Framework¡£ 1.7 .NET FrameworkÖ§³ÖÄÄЩÓïÑÔ£¿ ΢ÈíÌṩÁËC#¡¢C++¡¢VBºÍJScript±àÒëÆ÷£¬ÆäËü³§ÉÌÒѾÐû³ÆËüÃÇÓÐÒ⿪·¢Õë¶ÔCOBOL¡¢Eiffel¡¢Perl¡¢ Smalltalk ºÍ PythonµÈÓïÑÔµÄ.NET±àÒëÆ÷¡£ 1.8 .NET Framework½«»á±ê×¼»¯Â𣿠ÒÔÏÂÊÇÀ´×ÔÓÚhttp://msdn.microsoft.com/net/ecma/µÄÒ»¶Î»°£º¡°2001Äê12ÔÂ13ÈÕ£¬ECMA»áÔ±´ó»áÅú×¼C#ºÍͨÓÃÓïÑÔ»ù´¡ÉèÊ©£¨CLI£©¹æ·¶³ÉΪ¹ú¼Ê±ê×¼¡£ÔÚECMA±ê×¼ÖУ¬ËüÃǵÄÃû×Ö½«»áÊÇECMA-334 £¨C#£©ºÍECMA-335 £¨CLI£©¡£¡± CLR = Common Language Runtime£¨Í¨ÓÃÓïÑÔÔËÐÐʱ£©¡£CLRÊÇÒ»Ì×±ê×¼×ÊÔ´£¬£¨ÀíÂÛÉÏ£©¿ÉÒÔ±»ÈκÎ.NET³ÌÐòËùÀûÓ㬶ø²»¹ÜʹÓÃÄÄÖÖ³ÌÐòÓïÑÔ¡£Robert Schmidt£¨Î¢Èí£©ÔÚËûµÄMSDN PDC#ÎÄÕÂÀÁоÙÁËÈçÏÂCLR×ÊÔ´£º
Õâ¶ÔÓÚ.NETÊÀ½çÀ´ËµÒâζ×Åʲô£¿²»Í¬³ÌÐòÓïÑÔµÄÄÜÁ¦½«±È¹ýÈ¥ÈκÎʱºò¸ü¼ÓÇ÷ͬ£¬¾¡¹ÜÏÔÈ»²¢·ÇËùÓÐÓïÑÔ¶¼ÄÜÖ§³ÖËùÓÐCLR·þÎñ¡£ CTS = Common Type System£¨Í¨ÓÃÀàÐÍϵͳ£©¡£ÕâÊÇ.NETÔËÐÐʱÄܹ»Àí½âµÄÒ»´óÌ×ÀàÐÍ£¬Òò´Ë£¬.NETÓ¦ÓóÌÐò¾Í¿ÉÒÔʹÓÃËüÃÇ¡£²»¹ýҪעÒ⣬²¢²»ÊÇËùÓÐ.NETÓïÑÔ¶¼Ö§³ÖCTSÖÐËùÓÐÀàÐ͵ġ£CTSÊÇCLSµÄÒ»¸ö³¬¼¯¡£ CLS = Common Language Specification£¨Í¨ÓÃÓïÑԹ淶£©¡£ËüÊÇCTSµÄÒ»¸ö×Ó¼¯£¬ËùÓÐ.NETÓïÑÔ¶¼½«Ö§³ÖËü¡£ÈκÎʹÓÃCLS¼æÈݵÄÀàÐ͵ijÌÐò£¬¶¼¿ÉÒÔºÍÒÔÈκÎÓïÑÔ±àдµÄ.NET³ÌÐò½øÐл¥²Ù×÷¡£ ÀíÂÛÉÏ£¬ÕâÔÊÐíÔÚ²»Í¬µÄ.NETÓïÑÔÖ®¼ä½øÐзdz£½ôÃܵػ¥²Ù×÷¡£±È·½Ëµ£¬ÔÊÐíÒ»¸öC#Àà´ÓÒ»¸öVBÀà¼Ì³ÐÏÂÀ´¡£ IL = Intermediate Language£¨ÖмäÓïÑÔ£©¡£Ò²³ÆÎªMSIL£¨Microsoft Intermediate Language£¬Î¢ÈíÖмäÓïÑÔ£©»òCIL£¨Common Intermediate Language£¬Í¨ÓÃÖмäÓïÑÔ£©¡£ËùÓÐ.NETÔ´´úÂ루²»¹ÜÓÃÄÄÖÖÓïÑÔ±àд£©¶¼±»±àÒë³ÉIL¡£µ±Èí¼þ±»°²×°Ê±£¬ILת»»Îª»úÆ÷Â룬»òÔÚÔËÐÐʱ±»¼´Ê±£¨Just-In-Time£¬JIT£©±àÒëÆ÷Ëù´¦Àí¡£ C#ÊÇ΢ÈíÉè¼ÆµÄÒ»ÃÅÐÂÓïÑÔ£¬ÓÃÓÚºÍ.NET frameworkÐ×÷¡£ÔÚËüµÄ°×ƤÊé¡¶C#½éÉÜ¡·£¨¡°Introduction to C#¡±£©ÖУ¬Î¢ÈíÊÇÕâôÃèÊöC#µÄ£º ¡°C#ÊÇÒ»ÃÅÅÉÉúÓÚCºÍC++µÄ¼òµ¥¡¢ÏÖ´ú¡¢ÃæÏò¶ÔÏóºÍÀàÐͰ²È«µÄ³ÌÐòÓïÑÔ¡£C#£¨·¢ÒôC sharp£©¼áʵµØÖ²ÉíÓÚCºÍC++ÓïÑÔ¼Ò×åÊ÷ÖУ¬²¢½«ºÜ¿ìΪCºÍC++³ÌÐòÔ±ËùÊìϤ¡£C#Ä¿±êÊǽ«Visual BasicµÄ¸ßÉú²úÁ¦ºÍC++µÄÔÉúÍþÁ¦ÁªºÏÆðÀ´¡£¡± °ÑÉÏÃæÒ»¶Î»°Öеġ°C#¡±Óá°Java¡±È¡¶ø´úÖ®£¬Äã»á·¢ÏÖÕâ¸ö˵·¨ÒÀȻͦºÃJ ¼ÙÈçÄãÊÇÒ»ÃûC++³ÌÐòÔ±£¬Äã¿ÉÄÜÀÖÒâ¿´¿´ÎÒµÄC# FAQ£¨Ó¢ÎÄ£ºhttp://www.andymcm.com/csharpfaq.htm£¬ÖÐÎÄ£ºhttp://www.royaloo.com/articles/articles_2002/CSharpFAQ.htm£©¡£ 2.6 ÔÚ.NET»·¾³Ï£¬¡°Íйܣ¨managed£©¡±Ò»´ÊµÄº¬ÒåÊÇ£¿ ÊõÓï¡°Íйܣ¨managed£©¡±ÊÇÐí¶à»ìÂÒ²úÉúµÄÆðÒò£¬ÔÚ.NETÖУ¬Ëü±»ÓÃÓÚÐí¶à²»Í¬µÄµØ·½£¬Ëù±í´ïµÄ¶«Î÷ÓÐ×Åϸ΢µÄ²î±ð¡£ ÍйܴúÂ루Managed code£©£º.NET frameworΪÔËÐÐÔÚËüÀïÃæµÄ³ÌÐòÌṩÁËÊý¸öºËÐÄÔËÐÐʱ·þÎñ£¬ÀýÈçÒì³£´¦ÀíºÍ°²È«¡£ÎªÁËʹÕâЩ·þÎñÄܹ»ÔË×÷ÆðÀ´£¬´úÂë±ØÐëÏòÔËÐÐʱÌṩ×îÆðÂëµÄÐÅÏ¢£¬ÕâÑùµÄ´úÂë±»³ÆÎªÍйܴúÂ롣ĬÈÏÀ´Ëµ£¬ËùÓÐC#ºÍVisual Basic.NET´úÂë¶¼ÊÇÍйܵġ£VS7 C++´úÂëȱʡÀ´Ëµ²»ÊÇÍйܵ쬵«¿ÉÒÔͨ¹ýÖ¸¶¨ÃüÁîÐпª¹Ø£¨/com+£©£¬Ê¹±àÒëÆ÷Éú³ÉÍйܴúÂë¡£ ÍйÜÊý¾Ý£¨Managed data£©£ºÕâЩÊý¾ÝÓÉ.NETÔËÐÐʱÀ¬»øÊÕ¼¯Æ÷½øÐÐÅäÖúÍÇå³ý¡£C#ºÍVB.NETÊý¾Ý×ÜÊÇÍйܵģ¬Ä¬ÈÏÀ´Ëµ£¬VS7 C++Êý¾ÝÊÇ·ÇÍйܵ쬼´Ê¹Ê¹ÓÃ/com+¿ª¹ØÒ²ÊÇÈç´Ë£¬µ«¿ÉÒÔÓÃ__gc¹Ø¼ü×Ö½«Æä±ê¼ÇΪÍйܵġ£ ÍйÜÀࣨManaged classes£©£ºÍ¨³£ÔÚC++ÍйÜÀ©Õ¹£¨Managed Extensions for C++£©±³¾°ÏÂ̸¼°Õâ¸öÊõÓï¡£µ±Ê¹ÓÃME C++ʱ£¬Àà±ð¿É±êÒÔ__gc¹Ø¼ü×Ö¡£ÕýÈçÃû×ÖËù°µÊ¾µÄ£¬ÕâÒâζ×ÅÕâ¸öÀàµÄʵÌåËùÕ¼ÓõÄÄÚ´æÓÉÀ¬»øÊÕ¼¯Æ÷Íйܣ¬µ«Òâ˼»¹²»½öÓÚ´Ë¡£Õâ¸öÀà±ä³ÉÁËÒ»¸öÍêÈ«½»¸¶¸ø.NET´ó¼ÒÍ¥µÄ³ÉÔ±£¬Ëü¿ÉÏíÊÜ.NETËù´øÀ´µÄºÃ´¦£¬Í¬Ê±Ò²ÊÜ.NETÊ©¼ÓµÄÓйØÖÆÔ¼¡£¹ØÓںô¦µÄÒ»¸öÀý×ÓÊÇ¿ÉÒÔºÍÆäËüÓïÑÔ±àдµÄÀàºÜºÃµØ»¥²Ù×÷£¬ÀýÈ磬һ¸ömanaged C++Àà¿ÉÒԼ̳Ð×ÔÒ»¸öVBÀà¡£¹ØÓÚÔ¼ÊøµÄÒ»¸öÀý×ÓÊÇ£¬ÍйÜÀàÖ»Äܼ̳Ð×ÔÒ»¸ö»ùÀà¡£ 2.7 ʲôÊÇ·´É䣨reflection£©£¿ ËùÓÐ.NET±àÒëÆ÷¶¼ÎªËüÃÇÉú³ÉµÄÄ£¿é£¨modules£©ÖÐËù¶¨ÒåµÄÀàÐͲúÉúÔªÊý¾Ý£¨metadata£©£¬ÕâЩԪÊý¾ÝºÍÄ£¿é´ò°üÔÚÒ»Æð£¨Ä£¿é±»´ò°üÓÚÅä¼þ£¨assemblies£©Ö®ÖУ©£¬²¢¿Éͨ¹ý·´Éä»úÖÆ£¨reflection£©´æÈ¡¡£System.ReflectionÃû×Ö¿Õ¼äÖаüº¬µÄÀ࣬¿ÉÒÔÓÃÓÚ¡°²éѯ¡±Ä£¿é/Åä¼þµÄÀàÐÍ¡£ ʹÓ÷´ÉäÀ´´æÈ¡.NETÔªÊý¾Ý£¬·Ç³£ÀàËÆÓÚʹÓÃITypeLib/ITypeInfo´æÈ¡COMÖеÄÀàÐÍ¿âÊý¾Ý£¬²¢ÇÒ£¬Ëü±»ÓÃÓÚÀàËÆµÄÓÃ;£¬±È·½Ëµ£¬¾ö¶¨Êý¾ÝÀàÐͳߴ磬ÒÔÓÃÓÚ¿çÔ½ÉÏÏÂÎÄ/½ø³Ì/»úÆ÷±ß½çÁм¯£¨marshaling£©Êý¾Ý¡£ ·´É仹¿ÉÒÔÓÃÓÚ¶¯Ì¬µ÷Ó÷½·¨£¨methods£©£¨²Î¼ûSystem.Type.InvokeMember£©£¬»òÔÚÔËÐÐʱ¿Ì¶¯Ì¬´´½¨ÀàÐÍ£¨²Î¼ûSystem.Reflection.Emit.TypeBuilder£©¡£ Åä¼þÓÐʱºò±»ÃèÊöΪһ¸öÂß¼.EXE»ò.DLL£¬¿ÉÒÔÊÇÒ»¸öÓ¦Óã¨application£©£¨¾ßÓÐÒ»¸öÖ÷Èë¿Úµã£©£¬Ò²¿ÉÒÔÊÇÒ»¸ö¿â£¨library£©¡£Ò»¸öÅä¼þÓÉÒ»¸ö»ò¶à¸öÎļþ£¨dlls¡¢exesÒÔ¼°html ÎļþµÈ£©¹¹³É£¬´ú±íÒ»×é×ÊÔ´¡¢ÀàÐͶ¨ÒåÒÔ¼°¶ÔÕâЩÀàÐ͵ÄʵÏÖ¡£Ò»¸öÅä¼þ»¹¿ÉÒÔ°üº¬¶ÔÆäËüÅä¼þµÄÒýÓá£ÕâЩ×ÊÔ´¡¢ÀàÐͺÍÒýÓã¬ÃèÊöÓÚÒ»¸ö³ÆÎªÇåµ¥£¨manifest£©µÄÊý¾Ý¿éÖ®ÖС£Çåµ¥ÊÇÅä¼þµÄÒ»¸ö×é³É²¿·Ö£¬´Ó¶øÊ¹µÃÅä¼þ¾ßÓÐ×ÔÃèÊöÄÜÁ¦¡£ ¹ØÓÚÅä¼þÒ»¸öÖØÒª·½ÃæÊÇ£¬ËüÃÇÊÇÀàÐÍÉí·Ý£¨identity£©µÄÒ»¸ö×é³É²¿·Ö¡£ÀàÐ͵ÄÉí·ÝÊÇÓÉÀàÐÍËù´¦µÄÅä¼þºÍÀàÐÍÃû×ÖÁªºÏ¶ø³É£¬ÕâÒâζ×Å£¬¼ÙÈçÅä¼þAµ¼³öÒ»¸ö½ÐTµÄÀàÐÍ£¬Åä¼þBÒ²µ¼³öÒ»¸ö½ÐTµÄÀàÐÍ£¬.NETÔËÐÐʱ»á½«ËüÃÇÊÓ×÷Á½¸öÍêÈ«²»Í¬µÄÀàÐÍ¡£´ËÍ⣬²»Òª°ÑÅä¼þºÍÃû×Ö¿Õ¼ä»ìΪһ̸¡£Ãû×ֿռ䲻¹ýÊÇÒ»ÖÖÓÃÀ´°´²ã´Î×éÖ¯ÀàÐÍÃû×ֵķ½Ê½£¬¶ÔÓÚÔËÐÐʱÀ´Ëµ£¬ÀàÐÍÃû×Ö¾ÍÊÇÀàÐÍÃû×Ö£¬²»¹ÜÓÃûÓÃÃû×Ö¿Õ¼äÀ´×éÖ¯Ãû×Ö¡£Åä¼þ¼ÓÉÏÀàÐÍÃû×Ö£¨²»¹ÜÕâ¸öÀàÐÍÃû×ÖÊÇ·ñÊôÓÚÒ»¸öÃû×ֿռ䣩£¬¿ÉÏòÔËÐÐʱ±ê¼ÇÒ»¸öΨһµÄÀàÐÍ¡£ ¶Ô.NET°²È«À´Ëµ£¬Åä¼þÒ²·Ç³£ÖØÒª£¬Ðí¶à°²È«Ô¼Êø±»Ç¿¼ÓÓÚÅä¼þ±ß½ç¡£ ×îºó£¬ÔÚ.NETÖУ¬Åä¼þÊǰ汾е÷µÄµ¥Ôª¡£ÏÂÃæ¶Ô´ËÓиü¶àÃèÊö¡£ Éú³ÉÅä¼þ×î¼òµ¥µÄ°ì·¨ÊÇÖ±½ÓÀûÓÃ.NET±àÒëÆ÷¡£ÀýÈçÏÂÃæC#³ÌÐò£º public class CTest { public CTest() { System.Console.WriteLine( "Hello from CTest" ); } } ¿ÉÒÔÕâÑù½«Ëü±àÒë³ÉÒ»¸ö¿âÅä¼þ£¨library assembly£¬ dll£©£º csc /t:library ctest.cs È»ºó£¬¿ÉÒÔÔËÐС°IL·´»ã±àÆ÷£¨IL Disassembler£©¡±À´²é¿´Åä¼þÄÚÈÝ£¬Õâ¸ö¹¤¾ßÊǸúËæ.NET SDKÒ»Æð·Ö·¢µÄ¡£ ÄãÒ²¿ÉÒÔ½«Ô´´úÂë±àÒë³ÉÄ£¿é£¨modules£©£¬È»ºóʹÓÃÅä¼þÁ¬½ÓÆ÷£¨assembly linker£¬al.exe£©½«Ä£¿éÁ¬½á³ÉÒ»¸öÅä¼þ¡£¶ÔÓÚC#±àÒëÆ÷À´Ëµ£¬¿ÉÒÔʹÓÃ/target:module¿ª¹ØÉú³ÉÒ»¸öÄ£¿é£¬¶ø²»ÊÇÉú³ÉÒ»¸öÅä¼þ¡£ 3.3 ˽ÓÐÅä¼þ£¨private assembly£©ºÍ¹²ÏíÅä¼þ£¨shared assembly£©Ö®¼äÓÐÊ²Ã´Çø±ð£¿ λÖúͿɼûÐÔ£ºÒ»¸ö˽ÓÐÅä¼þͨ³£Îªµ¥¸öÓ¦ÓÃËùʹÓ㬲¢ÇÒ´æ´¢ÓÚÕâ¸öÓ¦ÓÃËùÔÚµÄĿ¼֮ÖУ¬»ò´ËĿ¼ÏÂÃæµÄÒ»¸ö×ÓĿ¼ÖС£¹²ÏíÅä¼þͨ³£´æ´¢ÔÚÈ«¾ÖÅä¼þ»º´æ£¨global assembly cache£©Ö®ÖУ¬ÕâÊÇÒ»¸öÓÉ.NETÔËÐÐʱËùά»¤µÄÅä¼þ²Ö¿â¡£¹²ÏíÅä¼þͨ³£ÊǶÔÐí¶àÓ¦Óö¼ÓÐÓõĴúÂë¿â£¬±ÈÈç.NET frameworkÀà¡£ °æ±¾Ðµ÷£ºÔËÐÐʱֻ¶Ô¹²ÏíÅä¼þÇ¿¼Ó°æ±¾Ô¼Êø£¬¶Ô˽ÓÐÅä¼þ²»Æð×÷Óᣠͨ¹ýËÑË÷Ŀ¼·¾¶À´±Ë´Ë·¢ÏÖ¡£Óм¸¸öÒòËØ»áÓ°ÏìÕâ¸ö·¾¶£¨±ÈÈçÓ¦ÓÃÓòËÞÖ÷£¨AppDomain host£©ºÍÓ¦ÓÃÅäÖÃÎļþ£©¡£µ«¶ÔÓÚ˽ÓÐÅä¼þÀ´Ëµ£¬ËÑË÷·¾¶Í¨³£ÊÇÓ¦ÓÃËùÔÚĿ¼¼°Æä×ÓĿ¼£¬¶ø¶ÔÓÚ¹²ÏíÅä¼þÀ´Ëµ£¬ËÑË÷·¾¶Í¨³£ºÍ˽ÓÐÅä¼þ·¾¶Ò»Ñù£¬Íâ¼Ó¹²ÏíÅä¼þ»º´æ¡£ 3.5 Åä¼þµÄ°æ±¾Ðµ÷¹¤×÷»úÀíÊÇÔõÑùµÄ£¿ ÿһ¸öÅä¼þ¶¼ÓÐÒ»¸ö³ÆÎª¼æÈÝÐÔ°æ±¾µÄ°æ±¾ºÅ£¬²¢ÇÒ£¬¶ÔÒ»¸öÅä¼þµÄÿһ¸öÒýÓ㨴ÓÁíÍâÒ»¸öÅä¼þÖнøÐÐÒýÓã©£¬¼È°üÀ¨±»ÒýÓÃÅä¼þµÄÃû×Ö£¬Ò²°üÀ¨°æ±¾ºÅ¡£ °æ±¾ºÅÓÉËĸöÊý×Ö²¿·Ö×é³É£¨ÀýÈ磺5.5.2.33£©¡£Ç°Á½¸öÊý×ÖÖУ¬ÓÐÈÎÒâÒ»¸ö²»Ò»ÑùµÄÅä¼þ£¬Í¨³£¾Í±»¿´×÷ÊDz»¼æÈݵġ£¼ÙÈçǰÁ½¸öÏàͬ£¬µ«µÚÈý¸ö²»Í¬£¬Åä¼þ¾Í±»ÈÏΪ¡°¿ÉÄܼæÈÝ¡±¡£¼ÙÈçÖ»ÓеÚËĸöÊý×ÖÊDz»Ò»ÑùµÄ£¬Åä¼þ¾Í±»ÈÏΪÊǼæÈݵġ£²»¹ý£¬ÕâÖ»ÊÇĬÈϵÄÖ¸µ¼·½Õ룬Êǰ汾²ßÂÔ£¨version policy£©¾ö¶¨ÁËÕâЩ¹æÔòµÄÇ¿¼Ó·¶Î§¡£°æ±¾²ßÂԿɾÓÉÓ¦ÓÃÅäÖÃÎļþÀ´Ö¸¶¨¡£ Çмǣº°æ±¾Ðµ÷Ö»Õë¶Ô¹²ÏíÅä¼þ£¬¶Ô˽ÓÐÅä¼þ²»Æð×÷Óᣠ4. Ó¦ÓÃÓò£¨Application Domains£© ¿É½«Ó¦ÓÃÓòÏëÏóΪÇáÁ¿¼¶½ø³Ì¡£¶à¸öÓ¦ÓÃÓò¿ÉÒÔ¹²´æÓÚÒ»¸öWin32½ø³ÌÖ®ÖС£Ó¦ÓÃÓòµÄÊ×ÒªÓÃ;ÊÇΪÁ˽«Ó¦ÓóÌÐò±Ë´Ë¸ôÀ뿪¡£ Win32½ø³Ìͨ¹ýÕ¼ÓнØÈ»²»Í¬µÄÄÚ´æµØÖ·¿Õ¼ä¶øÌṩ¸ôÀë»úÖÆ£¬ÕâÊǺܹÜÓõ쬵«Ëü´ú¼Û°º¹ó¶øÇÒÉìËõÐÔ²»ºÃ¡£.NETÔËÐÐʱͨ¹ý±£³Ö¶ÔÄÚ´æÊ¹ÓõĿØÖÆ£¬À´Ç¿ÖÆÖ´ÐÐÓ¦ÓÃÓò¸ôÀë¡£Ó¦ÓÃÓòÖеÄËùÓÐÄÚ´æ¶¼ÓÉ.NETÔËÐÐʱÀ´Íйܣ¬Òò´Ë£¬ÔËÐÐʱ¿ÉÒÔÈ·±£Ò»¸öÓ¦ÓÃÓòÀïµÄ¶«Î÷²»»á´æÈ¡±ðµÄÓ¦ÓÃÓòµÄÄÚ´æ¡£ Ó¦ÓÃÓòͨ³£ÓÉËÞÖ÷£¨hosts£©´´½¨¡£WindowsÍâ¿Ç£¨Windows Shell£©¡¢ASP.NETºÍIE¶¼ÊÇËÞÖ÷µÄÀý×Ó¡£µ±´ÓÃüÁîÐÐÔËÐÐ.NETÓ¦ÓÃʱ£¬ËÞÖ÷¾ÍÊÇÍâ¿Ç¡£Íâ¿ÇΪÿһ¸öÓ¦Óô´½¨Ò»¸öеÄÓ¦ÓÃÓò¡£ Ó¦ÓÃÓò»¹¿ÉÒÔÓÉ.NETÓ¦ÓÃÏÔʽ´´½¨¡£Õâ¶ùÓÐÒ»¸öC#Àý×Ó£¬Ëü´´½¨ÁËÒ»¸öAppDomain£¬ºóÕßÓÖ´´½¨ÁËÒ»¸ö¶ÔÏóÀàµÄʵÌ壬ȻºóÖ´ÐÐÕâ¸ö¶ÔÏóµÄÒ»¸ö·½·¨¡£×¢Ò⣬Äã±ØÐ뽫Õâ¶Î´úÂë²úÉúµÄ¿ÉÖ´ÐÐÎļþÃüÃûΪappdomaintest.exe£¬ÒÔʹÆäÄܹ»ÈçÆÚ¹¤×÷¡£ using System; using System.Runtime.Remoting; public class CAppDomainInfo : MarshalByRefObject { public string GetAppDomainInfo() { return "AppDomain = " + AppDomain.CurrentDomain.FriendlyName; } } public class App { public static int Main() { AppDomain ad = AppDomain.CreateDomain( "Andy's new domain", null, null ); ObjectHandle oh = ad.CreateInstance( "appdomaintest", "CAppDomainInfo" ); CAppDomainInfo adInfo = (CAppDomainInfo)(oh.Unwrap()); string info = adInfo.GetAppDomainInfo(); Console.WriteLine( "AppDomain info: " + info ); return 0; } } 4.3 ÎÒÄܱàд×Ô¼ºµÄ.NETËÞÖ÷£¨.NET host£©Â𣿠5. À¬»øÊÕ¼¯£¨Garbage Collection£© À¬»øÊÕ¼¯ÊÇÒ»ÖÖÓÉÔËÐÐʱ×é¼þ¸ºÔð¹ÜÀí¶ÔÏóÉúÃüÆÚÒÔ¼°ËüÃÇËùÕ¼ÓõĶÑÄڴ棨heap memory£©µÄϵͳ¡£¶ÔÓÚ.NETÀ´Ëµ£¬Õâ²¢²»ÊÇʲôж«Î÷£¬JavaÒÔ¼°ºÜ¶àÆäËüÓïÑÔ/ÔËÐÐʱʹÓÃÀ¬»øÊÕ¼¯»úÖÆÒѾÓÐÄÇôһ¶Îʱ¼äÁË¡£ 5.2 µ±¶ÔÏó×îºóÒ»¸öÒýÓñ»½â³ýʱ£¬ËüÒ²²¢²»×ÜÊÇÁ¢¼´±»Ïú»Ù£¬ÕæµÄÂ𣿠û´í¡£¶ÔÓÚ¶ÔÏóµÄÏú»ÙÒÔ¼°ËüËùÕ¼ÓõÄÄÚ´æµÄ»ØÊÕʱ»ú£¬À¬»øÊÕ¼¯Æ÷ûÓÐÌṩÈκε£±£¡£ ÔÚµµ°¸¿âÀïÓÐÒ»¸öÓÐÒâ˼µÄÏßË÷£¬ÓÉChris Sells·¢Æð£¬ÊǹØÓÚC#ÖжÔÏóµÄ·ÇÈ·¶¨ÐÔÏú»ÙµÄ£º http://discuss.develop.com/archives/wa.exe?A2=ind0007&L=DOTNET&P=R24819 2000Äêʮԣ¬Î¢ÈíBrian HarryͶµÝÁ˶ÔÕâ¸öÎÊÌâµÄ³¤Æª·ÖÎö£º http://discuss.develop.com/archives/wa.exe?A2=ind0010A&L=DOTNET&P=R28572 ¿ÉÔÚÕâ¶ù¿´µ½Chris Sells¶ÔBrianÌù×ÓµÄÓ¦´ð£º http://discuss.develop.com/archives/wa.exe?A2=ind0010C&L=DOTNET&P=R983 5.3 Ϊʲô.NETÔËÐÐʱ²»Ìṩȷ¶¨ÐÔµÄÏú»Ù»úÖÆ£¿ ÕâÒª¹éÒòÓÚÀ¬»øÊÕ¼¯Ëã·¨¡£.NETÀ¬»øÊÕ¼¯Æ÷µÄ¹¤×÷»úÀíÊÇ£¬ÖÜÆÚÐԵرéÀú±»Ó¦Óõ±Ç°ÒýÓõÄËùÓжÔÏóµÄÁÐ±í¡£ÔÚÕâ¸öËÑË÷¹ý³ÌÖУ¬·²ÊÇûÓз¢ÏֵĶÔÏ󣬶¼½«×¼±¸ÓèÒÔÏú»Ù£¬ËüÃÇÕ¼ÓõÄÄÚ´æÒ²½«±»Êջء£ÕâÖÖËã·¨°µÊ¾µ±¶ÔÏóµÄ×îºóÒ»¸öÒýÓÃÒ²±»½â³ýʱ£¬ÔËÐÐʱ²¢²»»áÁ¢¼´½Óµ½Í¨Öª£¬Ö»ÓÐÏÂÒ»´Î¶Ô¶Ñ£¨heap£©½øÐÐÇåɨʱ£¬²ÅÄÜ·¢ÏÖÕâ¸öÇé¿ö¡£ ½øÒ»²½¶øÑÔ£¬Ö´ÐÐÀ¬»øÊÕ¼¯Çåɨ´ÎÊýÔ½ÉÙ£¬ÕâÀàËã·¨¹¤×÷µÃÔ½ºÃ¡£Í¨³£À´Ëµ£¬¶ÑµÄºÄ¾¡ÊÇÊÕ¼¯ÇåɨµÄ´¥·¢Ìõ¼þ¡£ 5.4 ȱ·¦È·¶¨ÐÔµÄÏú»Ù»úÖÆÔÚ.NETÖгɸöÎÊÌâÂ𣿠µ±È»ÊǸöÎÊÌ⣬ËüÓ°ÏìÁË×é¼þµÄÉè¼Æ¡£¼ÙÈçÄãµÄ¶ÔÏó³ÖÓдú¼Û°º¹ó»òϡȱµÄ×ÊÔ´£¨±ÈÈçÊý¾Ý¿âËø£©£¬ÄãÓ¦¸ÃÌṩijÖÖ°ì·¨£¬Ê¹µÃ¿Í»§³ÌÐò¿ÉÒÔÔÚÍêÊÂʱ£¬¸æËß¶ÔÏóÊͷŵôÕâЩ×ÊÔ´¡£Î¢Èí½¨ÒéÄãÌṩһ¸ö½ÐDispose()µÄ·½·¨À´´ïµ½Õâ¸öÄ¿µÄ¡£È»¶ø£¬¶ÔÓÚ·Ö²¼Ê½¶ÔÏóÀ´Ëµ£¬Õ⽫»áµ¼ÖÂÎÊÌâ¡£ÔÚÒ»¸ö·Ö²¼Ê½µÄϵͳÖУ¬ËÀ´µ÷ÓÃDispose()·½·¨£¿ÐèÒªÓÐijÖÖÐÎʽµÄÒýÓüÆÊý»úÖÆ»òËùÓÐȨ¹ÜÀí»úÖÆ£¬À´²Ù×Ý·Ö²¼Ê½¶ÔÏ󣬲»ÐÒµÄÊÇ£¬ÔËÐÐʱ¶Ô´ËûÓÐÌṩÈκΰïÖú¡£ 5.5 ·ÇÈ·¶¨ÐÔÏú»Ù»úÖÆ¶Ô´ÓÍйܴúÂ루managed code£©ÖÐʹÓÃCOM¶ÔÏóÓÐÓ°ÏìÂ𣿠Êǵġ£µ±ÔÚÍйܴúÂëÖÐʹÓÃCOM¶ÔÏóʱ£¬Äã´ó´óÒÀÀµÓÚÀ¬»øÊÕ¼¯Æ÷À´µ÷ÓÃÖս᷽·¨£¬ÒÔÊÍ·ÅÄãµÄ¶ÔÏó¡£¼ÙÈçÄãµÄCOM¶ÔÏó³ÖÓÐÒ»¸ö´ú¼Û¸ß°ºµÄ×ÊÔ´£¬¶øËüÖ»ÄÜÔÚ×îÖÕÊÍ·ÅʱµÃÒÔÇå³ýµÄ»°£¬Äã¿ÉÄÜҪΪÄãµÄ¶ÔÏóÌṩһ¸öеĽӿڣ¬´Ó¶øÖ§³ÖÏÔʽµÄDispose()·½·¨¡£ 5.6 ÎÒÌý˵Ӧ¸Ã±ÜÃâʹÓÃFinalize·½·¨£¬ÎÒÓ¦¸ÃÔÚÎÒµÄÀàÀïʵÏÖFinalize·½·¨Â𣿠һ¸ö¾ßÓÐFinalize·½·¨µÄ¶ÔÏó±ÈûÓÐÕâ¸ö·½·¨µÄ¶ÔÏó¸üÊʺÏÓÚÀ¬»øÊÕ¼¯Æ÷¡£²»´æÔÚ¹ØÓÚ¶ÔÏóÖÕ½á˳ÐòµÄ±£Ö¤£¬Òò´Ë£¬´ÓFinalize·½·¨ÖÐÈ¥´æÈ¡±ðµÄ¶ÔÏóÊÇÓÐÎÊÌâµÄ¡£×îºó£¬²»´æÔÚ¶ÔÒ»¸ö¶ÔÏóµ÷ÓÃFinalize·½·¨µÄÈκε£±££¬Òò´Ë£¬ÓÀÔ¶¶¼²»Ó¦¸ÃÒÀÀµËüÀ´Çå³ý¶ÔÏóËùÕ¼ÓõÄ×ÊÔ´¡£ ΢ÈíÍÆ¼öÈçϽâ¾öģʽ£º public class CTest : IDisposable { public void Dispose() { ... // Cleanup activities GC.SuppressFinalize(this); } ~CTest() // C# syntax hiding the Finalize() method { Dispose(); } } ͨ³£Çé¿öÏ£¬¿Í»§µ÷ÓÃDispose()£¬¶ÔÏóµÄ×ÊÔ´µÃµ½ÁËÊÍ·Å£¬À¬»øÊÕ¼¯Æ÷ͨ¹ýµ÷ÓÃSuppressFinalize()£¬ÒÔÃâ³ýÂÄÐÐÖÕ½áÒåÎñ¡£ÔÚ×µÄÇé¿öÏ£¬Ò²¾ÍÊÇ˵£¬ÔÚ¿Í»§Íü¼Çµ÷ÓÃDispose()µÄÇé¿öÏ£¬¾ÍÓÐÒ»¸öºÏÇéºÏÀíµÄ»ú»á£¬Í¨¹ýÀ¬»øÊÕ¼¯Æ÷¶ÔFinalize()µÄµ÷Ó㬶ÔÏóµÄ×ÊÔ´½«×îÖյõ½ÊÍ·Å¡£¼øÓÚÀ¬»øÊÕ¼¯Ëã·¨µÄ¾ÖÏÞÐÔ£¬Õâ¿´ÆðÀ´ÏóÊÇÒ»¸öÏ൱ºÏÀíµÄ°ì·¨¡£ 5.7 ÎÒÄܶÔÀ¬»øÊÕ¼¯Ëã·¨×÷Щ¿ØÖÆÂ𣿠һµãµã¡£¾ÙÀýÀ´Ëµ£¬System.GCÀ౩¶ÁËÒ»¸öCollect·½·¨£¬ËüÇ¿ÆÈÀ¬»øÊÕ¼¯Æ÷Á¢¼´È¥ÊÕ¼¯ËùÓв»ÔÙ±»ÒýÓõĶÔÏó¡£ 5.8 ÎÒÔõô²ÅÄÜ¿´³öÀ´À¬»øÊÕ¼¯Æ÷ÕýÔÚ¸ÉЩʲôÊ£¿
ÐòÁл¯Êǽ«¶ÔÏóת»»Îª×Ö½ÚÁ÷µÄ¹ý³Ì¡£·´ÐòÁл¯ÊÇ´Ó×Ö½ÚÁ÷¹¹½¨¶ÔÏóµÄ·´Ïò¹ý³Ì¡£ÐòÁл¯/·´ÐòÁл¯Í¨³£ÓÃÓÚ¶ÔÏóµÄ´«Ê䣨±È·½Ëµ£¬ÔÚÔ¶³Ì»¯£¨remoting£©µÄ¹ý³ÌÖУ©£¬»òÕß½«¶ÔÏó³Ö¾Ã»¯£¨±È·½Ëµ£¬´æµ½ÎļþÖлòÊý¾Ý¿âÀ¡£ 6.2 .NET Framework ¶ÔÐòÁл¯ÓÐÄÚ½¨Ö§³ÖÂ𣿠.NETÀà¿âÌṩÁËÁ½Àà¶ÀÁ¢µÄ»úÖÆ£ºXmlSerializerºÍSoapFormatter/BinaryFormatter¡£Î¢Èí½«XmlSerializer ÓÃÓÚ Web Services£¬¶ø½«SoapFormatter/BinaryFormatterÓÃÓÚÔ¶³Ì»¯¡£ÔÚÄã×Ô¼ºµÄ´úÂëÀÁ½¸öËæ±ãÄãÓᣠ6.3 ÎÒÏëÐòÁл¯ÎÒµÄÀàµÄʵÌ壬ÎÒÓ¦¸ÃʹÓà XmlSerializer¡¢SoapFormatterºÍBinaryFormatterÖеÄÄÄÒ»ÖÖ£¿ ÒªÊÓ¾ßÌåÇé¿ö¶ø¶¨¡£XmlSerializerÓÐЩÑϸñµÄÏÞÖÆ£¬±È·½Ëµ£¬ÒªÇóÄ¿±êÀàÓÐÒ»¸öÎÞ²ÎÊýµÄ¹¹ÔìÆ÷£¬²¢ÇÒ£¬Ö»Óй«¿ªµÄ¶Á/дÊôÐÔºÍ×ֶβſɱ»ÐòÁл¯¡£²»¹ý£¬´ÓºÃµÄÒ»ÃæÀ´Ëµ£¬XmlSerializer¶Ô¶¨ÖÆXMLÎĵµÌṩÁËÁ¼ºÃÖ§³Ö¡£XmlSerializerµÄÌØÐÔÒâζ×Å£¬Ëü×îÊʺÏÓÚÓÃÔÚ¿çÆ½Ì¨µÄÇé¿öÏ£¬»òÕßÓÃÓÚ´ÓÏÖÓеÄXMLÎĵµ¹¹½¨¶ÔÏó¡£ SoapFormatterºÍBinaryFormatter±ÈXmlSerializerµÄÏÞÖÆÒªÉÙ£¬±ÈÈç˵£¬ËüÃÇ¿ÉÒÔÐòÁл¯Ë½ÓÐ×ֶΡ£È»¶ø£¬ËüÃǶ¼ÐèҪĿ±êÀà±êÒÔ[Serializable]ÌØÐÔ£¬Òò´Ë£¬ÏóXmlSerializerÒ»Ñù£¬ÐèҪСÐÄÒÔÐòÁл¯·½Ê½À´±àдÀà¡£ÓÐЩ¹îÒìµÄ¶«Î÷Ò²ÊÇҪСÐÄÌá·ÀµÄ£¬±È·½Ëµ£¬ÔÚ·´ÐòÁл¯Ê±£¬Ð¶ÔÏóµÄ¹¹ÔìÆ÷²¢²»±»µ÷Óᣠ¶ÔSoapFormatterºÍBinaryFormatterµÄÑ¡Ôñ£¬È¡¾öÓÚÓ¦Óá£BinaryFormatter¶ÔÓÚÐòÁл¯ºÍ·´ÐòÁл¯¶¼ÊÇ·¢ÉúÔÚ.NETƽ̨Éϲ¢ÇÒÖ´ÐÐÐÔÄܺÜÖØÒªµÄÇé¿ö´óÓÐÓô¦¡£Í¨³£À´Ëµ£¬ÔÚËùÓÐÆäËüÇé¿öÏ£¬SoapFormatter¸üÓÐÒâÒ壬¼ÙÈçû³öʲô²í×ӵϰ£¬Ëü¸üÒ×ÓÚµ÷ÊÔ¡£ ¿ÉÒÔ¡£XmlSerializerÖ§³ÖºÜ¶àÌØÐÔ£¨attributes£©£¬ËüÃÇ¿ÉÒÔÓÃÓÚÎªÌØ¶¨µÄÀàÉ趨ÐòÁл¯·½Ê½¡£ÀýÈ磬¿É½«Ä³¸ö×ֶλòÊôÐÔ±êÒÔ[XmlIgnore]ÌØÐÔ£¬´Ó¶ø½«ÆäÅųýÔÚÐòÁл¯»úÖÆÖ®Íâ¡£ÁíÍâÒ»¸öÀý×ÓÊÇ[XmlElement]ÌØÐÔ£¬Ëü¿ÉÓÃÓÚÖ¸¶¨XMLÔªËØÃû³Æ ¡ª Õâ¸öÔªËØÃû³Æ¿É±»ÓÃÓÚÌØ¶¨µÄÊôÐÔ»ò×ֶΡ£ ¶ÔÓÚ¾ÓÉSoapFormatter/BinaryFormatterµÄÐòÁл¯£¬Ò²¿ÉÒÔʹÓÃÌØÐÔ½øÐÐijÖ̶ֳȵĿØÖÆ¡£ÀýÈ磬[NonSerialized]ÌØÐԵȼÛÓÚXmlSerializerµÄ[XmlIgnore]ÌØÐÔ¡£¶ÔÐòÁл¯¹ý³ÌµÄÖÕ¼«¿ØÖÆ£¬¿ÉÒÔͨ¹ýÔÚÆäʵÌå´òËã±»ÐòÁл¯µÄÀàÉÏ£¬ÊµÏÖISerializable½Ó¿Ú¡£ 6.5 ΪʲôXmlSerializerÕâôÂý£¿ XmlSerializerÓÐÒ»¸öonce-per-process-per-type¸ºµ£¡£Òò´Ë£¬µ±ÄãÔÚÓ¦ÓÃÖеÚÒ»´ÎÐòÁл¯»ò·´ÐòÁл¯Ò»¸ö¸ø¶¨ÀàÐ͵ĶÔÏóʱ£¬»á¸Ð¾õµ½Ã÷ÏÔµÄÑÓ³Ù¡£Í¨³£À´Ëµ£¬Õâ²»ÊǸöÎÊÌ⣬µ«Õâ»òÐíÒâζ¶ÔÓÚGUIÓ¦ÓÃÆô¶¯ÆÚ¼ä×°ÔØÅäÖÃÐÅÏ¢À´Ëµ£¬XmlSerializer²»ÊÇÒ»¸öºÃµÄÑ¡Ôñ¡£ 6.6Ϊʲôµ±ÎÒÊÔͼÐòÁл¯Ò»¸öÉ¢ÁÐ±í£¨Hashtable£©Ê±±¨´í£¿ XmlSerializer²»ÄÜÓÃÓÚÐòÁл¯ÈκÎʵÏÖÁËIDictionary½Ó¿ÚµÄÀàµÄʵÌ壬±È·½ËµHashtable¡£µ«SoapFormatterºÍBinaryFormatterûÓÐÕâ¸öÏÞÖÆ¡£ 6.7 XmlSerializerÅ׳öÁËÒ»¸öÒ»°ãÐԵĴíÎ󣺡°ÔÚ·´ÉäMyClassʱ³ö´í¡±£¬ÎÒÔõô²ÅÄܲéÃ÷³öÁËʲôÎÊÌ⣿ ¿É²é¿´Å׳öÒì³£µÄInnerException ÊôÐÔ£¬ÒÔ»ñµÃ¸üÏ꾡µÄ³ö´íÏûÏ¢¡£ ÖÁÉÙÓÐÁ½Àà.NETÌØÐÔ¡£µÚÒ»ÀàÎÒ³ÆÖ®ÎªÔªÊý¾ÝÌØÐÔ£¨metadata attribute£©£¬ËüÔÊÐí½«Ò»Ð©Êý¾Ý¸½ÔÚÀà»ò·½·¨ÉÏ£¬ÕâЩÊý¾Ý³ÉΪÀàµÄÔªÊý¾ÝµÄÒ»²¿·Ö£¬²¢£¨ÏóÀàµÄÆäËüÔªÊý¾ÝÒ»Ñù£©¿ÉÒÔ·´É䣨reflection£©·½Ê½·ÃÎÊ¡£¹ØÓÚÔªÊý¾ÝÌØÐÔµÄÀý×ÓÖ®Ò»ÊÇ[serializable]£¬Ëü¿ÉÒÔ¸½¼ÓÔÚij¸öÀàÉÏ£¬±íʾÕâ¸öÀàµÄʵÌå¿É±»ÐòÁл¯¡£ [serializable] public class CTest {} ÁíÍâÒ»ÀàÊÇÉÏÏÂÎÄÌØÐÔ£¨context attribute£©¡£ÉÏÏÂÎÄÌØÐÔºÍÔªÊý¾ÝÌØÐÔʹÓÃÀàËÆµÄÓï·¨£¬µ«ËüÃÇÖ®¼äÓÐןù±¾²»Í¬¡£ÉÏÏÂÎÄÌØÐÔÌṩÁËÒ»ÖÖ½ØÈ¡»úÖÆ£¬½å´Ë£¬ÊµÌ弤»îºÍ·½·¨µ÷ÓþͿɱ»ÔçһЩ»òÍíһЩ´¦Àí¡£¼ÙÈçÄã¶ÔKeith BrownµÄuniversal delegatorÓ¡ÏóÉî¿ÌµÄ»°£¬ÄãÓ¦¸Ã¶ÔÕâ¸ö˼Ïë¸Ðµ½ÊìϤ¡££¨Òë×¢£º¿É·ÃÎÊhttp://www.develop.com/kbrown/£¬ÒÔÁË½â¹ØÓÚuniversal delegator¸ü¶àÐÅÏ¢£© 7.2 ÎÒ¿ÉÒÔ´´½¨ÎÒ×Ô¼ºµÄÔªÊý¾ÝÌØÐÔ£¨metadata attributes£©Â𣿠¿ÉÒÔ¡£Ö»Ðè´ÓSystem.AttributeÅÉÉúÒ»¸öÀàÏÂÀ´£¬²¢½«Æä±êÒÔAttributeUsageÌØÐÔ¼´¿É¡£ÀýÈ磺 [AttributeUsage(AttributeTargets.Class)] public class InspiredByAttribute : System.Attribute { public string InspiredBy; public InspiredByAttribute( string inspiredBy ) { InspiredBy = inspiredBy; } } [InspiredBy("Andy Mc's brilliant .NET FAQ")] class CTest { } class CApp { public static void Main() { object[] atts = typeof(CTest).GetCustomAttributes(true); foreach( object att in atts ) if( att is InspiredByAttribute ) Console.WriteLine( "Class CTest was inspired by {0}", ((InspiredByAttribute)att).InspiredBy ); } } 7.3 ÎÒ¿ÉÒÔ´´½¨ÎÒ×Ô¼ºµÄÉÏÏÂÎÄÌØÐÔ£¨context attributes£©Â𣿠¿ÉÒÔ¡£¿´¿´Don BoxµÄÀý×Ó£¨Ãû½ÐCallThreshold£©£º http://www.develop.com/dbox/dotnet/threshold/£¬ÒÔ¼°Peter Drayton µÄ Tracehook.NET£º http://www.razorsoft.net/¡£ 8. ´úÂë·ÃÎʰ²È«£¨Code Access Security£© 8.1 ʲôÊÇ´úÂë·ÃÎʰ²È«£¨CAS£©£¿ CASÊÇ.NET°²È«Ä£Ð͵ÄÒ»¸ö×é³É²¿·Ö£¬Ëü¾ö¶¨Ä³¶Î´úÂëÊÇ·ñÔÊÐíÖ´ÐУ¬ÒÔ¼°ËüÔÚÔËÐÐʱ¿ÉÒÔʹÓÃʲôÑùµÄ×ÊÔ´¡£ÀýÈ磬CAS¿ÉÒÔ·ÀÖ¹.NET WebС³ÌÐò£¨applet£©¸ñʽ»¯ÄãµÄÓ²ÅÌ¡£ CAS°²È«²ßÂÔ£¨policy£©Î§ÈÆÁ½¸ö¹Ø¼ü¸ÅÄ´úÂë×飨code groups£©ºÍȨÏÞ£¨permissions£©¡£Ã¿Ò»¸ö.NETÅä¼þ¶¼ÊÇÒ»¸öÌØ¶¨´úÂë×éµÄ³ÉÔ±£¬Ã¿Ò»¸ö´úÂë×é¶¼±»ÊÚÓèÔÚij¸öÃüÃûȨÏÞ¼¯£¨named permission set£©ÀïÉ趨µÄȨÏÞ¡£ ÀýÈ磬¼ÙÈçʹÓÃĬÈϵݲȫ²ßÂÔ£¬´Óij¸öWebÕ¾µãÉÏÏÂÔØµÄ¿Ø¼þÊôÓÚ¡°Zone ¨C Internet¡±´úÂë×飬Õâ¸ö´úÂë×é¾Í¾ßÓÐÓÉ¡°Internet¡±ÃüÃûȨÏÞ¼¯Ëù¶¨ÒåµÄȨÏÞ¡££¨×ÔÈ»¶øÈ»£¬¡°Internet¡±ÃüÃûȨÏÞ¼¯´ú±í×ÅÒ»¸ö·Ç³£ÓÐÏ޵ķ¶Î§µÄȨÏÞ£© 8.3 ËÀ´¶¨ÒåCAS´úÂë×飨code groups£©£¿ ΢Èí¶¨ÒåÁËһЩĬÈϵĴúÂë×飬µ«Äã¿ÉÒÔÐÞ¸ÄËüÃÇ£¬ÉõÖÁ´´½¨Äã×Ô¼ºµÄ´úÂë×é¡£ÒªÏë¿´¿´»úÆ÷É϶¨ÒåµÄ´úÂë×飬¿ÉÒÔÃüÁîÐз½Ê½ÔËÐС°caspol -lg¡±¡£ÎÒ»úÆ÷ÉÏÊÇÕâÑùµÄ£º Level = Machine Code Groups: 1. All code: Nothing 1.1. Zone - MyComputer: FullTrust 1.1.1. Honor SkipVerification requests: SkipVerification 1.2. Zone - Intranet: LocalIntranet 1.3. Zone - Internet: Internet 1.4. Zone - Untrusted: Nothing 1.5. Zone - Trusted: Internet 1.6. StrongName - 0024000004800000940000000602000000240000525341310004000003 000000CFCB3291AA715FE99D40D49040336F9056D7886FED46775BC7BB5430BA4444FEF8348EBD06 F962F39776AE4DC3B7B04A7FE6F49F25F740423EBF2C0B89698D8D08AC48D69CED0FC8F83B465E08 07AC11EC1DCC7D054E807A43336DDE408A5393A48556123272CEEEE72F1660B71927D38561AABF5C AC1DF1734633C602F8F2D5: Everything ×¢Òâ´úÂë×éµÄ²ã´Î½á¹¹¡£×î¶¥²ãµÄÊÇ×îÒ»°ãµÄ£¨¡°All code¡±£©£¬È»ºó±»·Ö³É¼¸¸ö×Ó×飬ÿһ¸ö×Ó×黹¿ÉÒÔÔÙϸ·ÖÏÂÈ¥¡£»¹Òª×¢ÒâµÄÊÇ£¨ÕâÓеãÎ¥·´Ö±¾õ£©£¬×Ó×é¿ÉÒÔ¹ØÁªÓÐ±ÈÆä¸¸×é¸ü·ÅµÃ¿ªµÄȨÏÞ¼¯¡£ 8.4 ÎÒÔõôÀ´¶¨ÒåÎÒ×Ô¼ºµÄ´úÂë×飿 ʹÓÃcaspol¡£ÀýÈ磬¼Ù¶¨ÄãÐÅÈÎÀ´×Ôwww.mydomain.comµÄ´úÂ룬²¢ÇÒ£¬ÄãÏ£ÍûËüÄܹ»ÍêÈ«·ÃÎÊÄãµÄ»úÆ÷£¬µ«ÄãÓÖÏ£Íû¶ÔËùÓÐÆäËüInternetÕ¾µã±£³ÖĬÈÏÏÞÖÆ£¬Äã¾Í¿ÉÒÔÔÚ¡°Zone - Internet¡±´úÂë×éÏ£¬¼ÓÈëÒ»¸öеÄ×Ó´úÂë×飬ÈçÏ£º caspol -ag 1.3 -site www.mydomain.com FullTrust ÏÖÔÚÔËÐÐcaspol ¨Clg£¬Ä㽫»á·¢ÏÖдúÂë×éÒѾ±»×÷Ϊ×é1.3.1¶ø¼ÓÈ룺 ... 1.3. Zone - Internet: Internet 1.3.1. Site - www.mydomain.com: FullTrust ... ×¢Ò⣬Êý×Ö±êÇ©£¨1.3.1£©Ö»ÊÇcaspol×Ô¼ºÉú³ÉµÄ¶«Î÷£¬Ä¿µÄÊÇΪÁËÒ×ÓÚÒÔÃüÁîÐз½Ê½²é¿´´úÂë×飬µ×²ãµÄÔËÐÐʱÓÀÔ¶¶¼¿´²»µ½ÕâЩ¶«Î÷¡£ 8.5 ÎÒÔõô¸ü¸Ä´úÂë×éµÄȨÏÞ¼¯£¨permission set£©£¿ ʹÓÃcaspol¡£¼ÙÈçÄãÊÇ»úÆ÷µÄϵͳ¹ÜÀíÔ±µÄ»°£¬Äã¿ÉÒÔÔÚ¡°»úÆ÷¡±²ã½øÐвÙ×÷£¬ÕâÒâζ×ÅÄã×öµÄ¸ü¸Ä²»µ«»á³ÉΪÄÇ̨»úÆ÷µÄĬÈÏÉèÖ㬶øÇÒÓû§Ò²²»Äܹ»Ð޸ķŴóÕâЩȨÏÞ¡£¼ÙÈçÄãÊÇÒ»¸öÆÕͨÓû§£¨£¨²»ÊÇϵͳ¹ÜÀíÔ±£©£©£¬ÄãÈÔÈ»¿ÉÒÔÐÞ¸ÄȨÏÞ£¬µ«Ö»Äܽ«È¨ÏÞËõС¡£ÀýÈ磬ΪÁËÈÃIntranet´úÂëÄܹ»×öËüÏë×öµÄÊ£¬Äã¿ÉÒÔÕâô×ö¡£ caspol -cg 1.2 FullTrust ×¢Ò⣬ÒòΪÕâ±ÈĬÈϲßÂÔ£¨ÔÚÒ»¸ö±ê׼ϵͳ֮ÖУ©µÄȨÏÞÀ´µÃ´ó£¬ÄãÖ»ÄÜÔÚ»úÆ÷²ã×öÕâ¸öÐ޸ģ¬ÔÚÓû§²ã×öÕâÑùµÄÐÞ¸ÄûʲôЧ¹û¡£ ¿ÉÒÔ¡£Ê¹ÓÃcaspol ¨Cap£¬¶¨ÒåÒ»¸öXMLÎļþ£¬Ëü°üº¬ÓÐȨÏÞ¼¯ÖÐËùÒª°üº¬µÄȨÏÞ¡£ÎªÁ˽ÚÊ¡ÄãÒ»µãʱ¼ä£¬Õâ¶ù£¨http://www.eponymous.eclipse.co.uk/samplepermset.xml£©ÓÐÒ»¸öÏàÓ¦ÓÚ¡°Everything¡±È¨ÏÞ¼¯µÄÑùÀýÎļþ£¬Äã¿ÉÒÔÐÞ¸ÄËüÒÔÂú×ãÄãµÄÐèÒª¡£¸ÄºÃÒԺ󣬿ÉÒÔÕâÑù½«Ëü¼ÓÈëµ½¿ÉÓõÄȨÏÞ¼¯Ö®ÖУº caspol -ap samplepermset.xml ½ÓÏÂÀ´£¬ÎªÁ˽«Õâ¸öȨÏÞ¼¯Ê©¼ÓÓÚij¸ö´úÂë×éÉÏ£¬¿ÉÒÔÕâô×ö£º caspol -cg 1.3 SamplePermSet £¨Ä¬ÈÏÀ´Ëµ£¬1.3ÊÇ¡°Internet¡±´úÂë×飩 8.7 ÎÒÓöµ½ÁËһЩCASÂé·³£¬ÎÒÈçºÎ²ÅÄÜÕï¶ÏÊÇʲôµØ·½³öÁ˲î´í£¿ CaspolÓÐһЩѡÏî¿ÉÄÜ»áÅÉÉÏÓó¡¡£Ê×ÏÈ£¬Äã¿ÉÒÔʹÓÃcaspol ¨Crsg£¬½Ðcaspol¸æËßÄãÅä¼þËùÊôµÄ´úÂë×éÊÇʲô¡£Í¬ÑùµØ£¬ÄãÒ²¿ÉÒÔʹÓÃcaspol ¨Crsg£¬À´²éѯÊÇʲôÑùµÄȨÏÞÊ©¼ÓÓÚÖ¸¶¨µÄÅä¼þÖ®ÉÏÁË¡£ 8.8 ÎÒ¶ÔËùÓÐÕâЩCASÍæÒⷳ͸ÁË£¬ÎÒÄܽûÓÃËüÂ𣿠¿ÉÒÔ£¬Ö»ÒªÄãÊÇÒ»Ãûϵͳ¹ÜÀíÔ±µÄ»°¡£ÔËÐÐcaspol -s off ¼´¿É¡£ 9. ÖмäÓïÑÔ£¨Intermediate Language£¬IL£© ¿ÉÒÔ¡£Î¢ÈíÌṩÁËÒ»¸ö½Ð×÷IldasmµÄ¹¤¾ß£¬¿ÉÒÔÓÃÓڲ鿴Åä¼þµÄILºÍÔªÊý¾Ý¡£ 9.2ÄÜ´ÓIL¡°·´Ïò¹¤³Ì¡±£¨reverse-engineered£©³öÔ´´úÂëÀ´Â𣿠¿ÉÒÔ¡£Í¨³£À´Ëµ£¬´ÓILÖØÐÂÉú³É¸ß¼¶Ô´Â루±ÈÈçC#£©ÊÇÏ൱ÈÝÒ׵ġ£ 9.3 ÎÒÔõô²ÅÄÜ·ÀÖ¹ÎҵĴúÂë±»´ÓIL¡°·´Ïò¹¤³Ì¡±³öÀ´£¿ Ŀǰ»¹Ã»ÓÐʲô¼òµ¥µÄ°ì·¨À´×èÖ¹´ÓIL¡°·´Ïò¹¤³Ì¡±³ö´úÂë¡£½«À´»òÐí¿ÉÒÔÀûÓÃһЩIL»ìÏý¹¤¾ß£¨IL obfuscation tools£©£¬ËüÃÇ¿ÉÄÜÀ´×Ô΢Èí£¬Ò²¿ÉÄÜÀ´×ÔµÚÈý·½³§ÉÌ¡£ÕâЩ¹¤¾ßͨ¹ý¶ÔIL½øÐÐÌØÊâ´¦Àí£¬Ê¹µÃ¡°·´Ïò¹¤³Ì¡±±äµÃ´ó´óÀ§ÄÑ¡£ µ±È»£¬¼ÙÈçÄã±àдweb servicesµÄ»°£¬¡°·´Ïò¹¤³Ì¡±¾Í²»ÊǸöÎÊÌâÁË£¬ÒòΪ¿Í»§ÎÞ·¨Ö±½Ó·ÃÎÊÄãµÄIL¡£ 9.4 ÎÒ¿ÉÒÔÖ±½ÓÓÃIL±àд³ÌÐòÂ𣿠¿ÉÒÔ¡£Peter DraytonÏòDOTNETÓʼþÁбíÖÐͶµÝÁËÕâ¸ö¼òµ¥µÄÀý×Ó£º .assembly MyAssembly {} .class MyApp { .method static void Main() { .entrypoint ldstr "Hello, IL!" call void System.Console::WriteLine(class System.Object) ret } } ½«Õâ¶Î´úÂ뿽±´µ½Ò»¸ö½Ðhello.ilµÄÎļþÖУ¬È»ºóÔËÐÐilasm hello.il£¬½«»áÉú³ÉÒ»¸öexeÐÎʽµÄÅä¼þ¡£ 9.5 ÎÒÄÜÔÚILÖÐ×ö²»ÄÜÔÚC#ÖÐ×öµÄÊÂÇéÂ𣿠¿ÉÒÔ¡£¾ÙÁ½¸ö¼òµ¥µÄÀý×Ó£ºÔÚILÖУ¬Äã¿ÉÒÔÅ׳ö²»ÊÇ´ÓSystem.ExceptionÅÉÉú³öÀ´µÄÒì³££¬Ä㻹¿ÉÒÔʹÓÃϱ겻ÊÇ´Ó0¿ªÊ¼µÄÊý×é¡£ Õâ¸ö»°ÌâÕÐÖÂÁË´óÁ¿µÄÕùÂÛ£¬¼ÙÈçÄãÔĶÁÁËÓʼþÁÐ±íµµ°¸×ÊÁÏÄã¾ÍÖªµÀÁË¡£¿´¿´ÏÂÃæÕâÁ½ÌõÏßË÷£º http://discuss.develop.com/archives/wa.exe?A2=ind0007&L=DOTNET&D=0&P=68241 http://discuss.develop.com/archives/wa.exe?A2=ind0007&L=DOTNET&P=R60761 ÎÒÊÇÕâô¿´µÄ£ºCOMÄÚÈݷḻ£¬¶ÔÓÚ²»Í¬µÄÈËËü´ú±í×Ų»Í¬µÄ¶«Î÷£¬µ«¶ÔÎÒ¶øÑÔ£¬COM´Ó¸ù±¾ÉÏÀ´Ëµ£¬ÊÇС¿é´úÂëÖ®¼äÈçºÎ±Ë´Ë·¢ÏÖ²¢Ï໥ͨѶµÄ»úÖÆ¡£COM¾«È·¹æ¶¨ÁËÈçºÎ¶¨Î»ºÍͨѶ¡£ÔÚÒ»¸ö´¿´âµÄ.NETÊÀ½çÀһÇÐÈ«ÓÉ.NET¶ÔÏ󹹳ɣ¬Ð¡¿é´úÂëÈÔÈ»ÐèÒª±Ë´Ë·¢Ïֺͽ»Á÷£¬µ«ËüÃDz¢·ÇʹÓÃCOMÊֶΡ£ËüÃÇʹÓÃÒ»ÖÖ´ÓijЩ·½ÃæÀ´ËµÀàËÆÓÚCOMµÄÄ£ÐÍ£¬±ÈÈçÒÔ±í¸ñÐÎʽͬ×é¼þÒ»Æð´ò°ü´æ´¢µÄÀàÐÍÐÅÏ¢£¬·Ç³£ÀàËÆÓÚºÍCOM×é¼þÒ»Æð´ò°ü´æ´¢µÄÀàÐÍ¿âÐÅÏ¢£¬µ«Ëü²¢·ÇCOM¡£ ÄÇô£¬ÕâÓÐʲôҪ½ôµÄÂð£¿ßí£¬ÎÒÕæµÄ²»¹ØÐÄ´ó¶àÊýCOM¶«Î÷½¥½¥ÀëÈ¥¡£ÎÒ²»»áÔÚÒâ²»ÐèÒªÅܵ½×¢²á±íÀïתһȦµÄ×é¼þ²éÕÒ·½Ê½£¬ÎÒÒ²²»ÔÚºõ²»Ê¹ÓÃIDLÀ´¶¨ÒåÎҵĽӿڡ£µ«ÊÇ£¬ÓÐÒ»¼þÊÂÇéÎÒ²»»á·ÅÆú£ºÎÒ²»Ï붪µô»ùÓڽӿڵĿª·¢Ë¼Ïë¡£ÔÚÎÒ¿´À´£¬COM×îΰ´óµÄÁ¦Á¿£¬¾ÍÊÇËü¶Ô½Ó¿ÚºÍʵÏÖÖ®¼ä½øÐзÖÀëµÄÖýÌú°ãµØ¼á³Ö¡£²»ÐÒµÄÊÇ£¬.NET framework¿´À´²¢Ã»ÓÐÈç´Ë¼á³Ö£¬ËüÈÃÄãÄܹ»×ö»ùÓڽӿڵĿª·¢£¬µ«Ëü²¢Î´¼á³Ö·ÇÕâÑù²»¿É¡£ÓÐÈË¿ÉÄÜ»áÕùÂÛ¶àÒ»ÖÖÑ¡Ôñ´ÓÀ´¶¼²»ÊÇÒ»¼þ»µÊ£¬»òÐíËûÃÇÊǶԵ쬵«ÎÒÎÞ·¨²»ÏëÏñÕâ¿ÉÄÜÊÇÒ»¸öÍ˲½¡£ ¶ÔÓÚ.NET¿ª·¢ÈËÔ±À´Ëµ£¬ËüÒѾ±ôÁÙËÀÍöÁË¡£.NET Framework ÌṩÁËÒ»¸ö²»ÊÇ»ùÓÚDCOMµÄеÄÔ¶³Ì»¯Ä£ÐÍ£¬µ±È»ÁË£¬ÔÚ»¥²Ù×÷µÄÇéÐÎÏ£¬»¹»áÓõ½DCOMµÄ¡£ ²»È»¡£µÚÒ»°æµÄ.NETÌṩÁ˶ÔÏÖÓÐCOM+·þÎñµÄ·ÃÎÊ£¨Í¨¹ýÒ»¸ö»¥²Ù×÷²ã£©£¬¶ø²»ÊÇʹÓÃÒ»¸ö±¾µØ.NET·þÎñÀ´È¡´úËü¡£ÓÐһЩÎ廨°ËÃŵŤ¾ßºÍ¹¦ÄÜÒÔÊÔͼʹÕâÖÖ·ÃÎʾ¡¿ÉÄÜÉÙһЩ¿àÍ´¡£Ö°Òµ¿ª·¢ÈËÔ±´ó»áÉÏ·¢Ë͵Ä.NET SDK£¬°üÀ¨¶ÔCOM+ºËÐÄ·þÎñµÄ»¥²Ù×÷Ö§³Ö£¨±ÈÈçJIT¼¤»î¡¢ÊÂÎñµÈ£©£¬µ«ÉÐδÌṩ¶ÔijЩ¸ü¸ß²ã·þÎñ£¨ÀýÈçCOM+ʼþ¡¢¶ÓÁÐ×é¼þµÈ£©µÄÖ§³Ö¡£ Ëæ×Åʱ¼äµÄÍÆÒÆ£¬ÎÒÃÇÆÚÍû»¥²Ù×÷Äܹ»±äµÃ¸ü¼ÓÎ޷죬Õâ»òÐíÒâζ×ÅijЩ·þÎñ½«³ÉΪCLRµÄºËÐÄ×é³É²¿·Ö£¬²¢ÇÒ£¨»òÕߣ©ÕâÒâζ×ÅijЩ·þÎñ½«»áÒÔÍйܴúÂëÖØÐ´£¬ÒÔÔËÐÐÓÚCLRÖ®ÉÏ¡£ ¹ØÓÚÕâ¸öÖ÷ÌâµÄ¸ü¶àÌÖÂÛ£¬¿ÉÒÔµ½µµ°¸ÖÐÐÄËÑË÷Joe LongµÄÌû×Ó¡£JoeÊÇ΢ÈíCOM+ÍŶÓÏîÄ¿¾Àí¡£¿É´ÓÏÂÃæÕâÌõÏûÏ¢¿ªÊ¼£º http://discuss.develop.com/archives/wa.exe?A2=ind0007&L=DOTNET&P=R68370¡£ 10.4 ÎÒÄÜÔÚ.NET³ÌÐòÖÐʹÓÃCOM×é¼þÂ𣿠¿ÉÒÔ¡£ÔÚ.NETÔËÐÐʱÖУ¬¿ÉÒÔ¾ÓÉÔËÐÐʱ¿Éµ÷Óðü×°Æ÷£¨Runtime Callable Wrapper£¬RCW£©À´·ÃÎÊCOM×é¼þ¡£Õâ¸ö°ü×°Æ÷½«COM×é¼þ±©Â¶µÄCOM½Ó¿Úת»»Îª.NET¼æÈݵĽӿڡ£¶ÔÓÚOLE×Ô¶¯»¯½Ó¿Ú¶øÑÔ£¬RCW¿ÉÒÔ´ÓÀàÐÍ¿â×Ô¶¯Éú³É¡£¶ÔÓÚ·ÇOLE×Ô¶¯»¯½Ó¿ÚÀ´Ëµ£¬¿ÉÄÜÐèÒª¿ª·¢Ò»¸ö¶¨ÖƵÄRCW£¬ÒÔ½«COM½Ó¿Ú±©Â¶µÄÀàÐÍÒÔÊÖ¹¤·½Ê½Ó³Éäµ½.NET¼æÈݵÄÀàÐÍ¡£ ¶ÔÓÚÄÇЩÊìϤATLµÄ¿ª·¢ÈËÔ±À´Ëµ£¬Õâ¶ùÓÐÒ»¸ö¼òµ¥Àý×Ó¡£Ê×ÏÈ£¬´´½¨Ò»¸öʵÏÖÁËÈçÏÂIDLµÄATL×é¼þ£º import "oaidl.idl"; import "ocidl.idl"; [ object, uuid(EA013F93-487A-4403-86EC-FD9FEE5E6206), helpstring("ICppName Interface"), pointer_default(unique), oleautomation ] interface ICppName : IUnknown { [helpstring("method SetName")] HRESULT SetName([in] BSTR name); [helpstring("method GetName")] HRESULT GetName([out,retval] BSTR *pName ); }; [ uuid(F5E4C61D-D93A-4295-A4B4-2453D4A4484D), version(1.0), helpstring("cppcomserver 1.0 Type Library") ] library CPPCOMSERVERLib { importlib("stdole32.tlb"); importlib("stdole2.tlb"); [ uuid(600CE6D9-5ED7-4B4D-BB49-E8D5D5096F70), helpstring("CppName Class") ] coclass CppName { [default] interface ICppName; }; }; Ò»µ©´´½¨ºÃ×é¼þ£¬ÄãÓ¦¸ÃÄܹ»µÃµ½Ò»¸öÀàÐͿ⣬¶ÔÕâ¸öÀàÐÍ¿âÔËÐÐTLBIMP¹¤¾ß£¬ÈçÏ£º tlbimp cppcomserver.tlb ¼ÙÈç³É¹¦µÄ»°£¬Äã»á¿´µ½ÈçÏÂÏûÏ¢£º Typelib imported successfully to CPPCOMSERVERLib.dll ÏÖÔÚ£¬ÄãÐèÒªÒ»¸ö.NET¿Í»§³ÌÐò£¬ÈÃÎÒÃÇʹÓÃC#À´±àд¡£´´½¨Ò»¸ö°üº¬ÓÐÈçÏ´úÂëµÄ.csÎļþ£º using System; using CPPCOMSERVERLib; public class MainApp { static public void Main() { CppName cppname = new CppName(); cppname.SetName( "bob" ); Console.WriteLine( "Name is " + cppname.GetName() ); } } ×¢Ò⣬ÎÒÃÇʹÓÃÀàÐÍ¿âµÄÃû×Ö×÷ΪÃû×ֿռ䣬²¢ÒÔCOMÀàµÄÃû×Ö×÷ΪÀàµÄÃû×Ö¡£×÷Ϊ´úÌæ£¬ÎÒÃÇÒ²¿ÉÒÔʹÓÃCPPCOMSERVERLib.CppName×÷ΪÀàµÄÃû×Ö£¬²¢ÇÒ²»Ê¹ÓÃusing CPPCOMSERVERLibÓï¾ä¡£ ¿ÉÒÔÕâÑù±àÒëÕâЩC#´úÂ룺 csc /r:cppcomserverlib.dll csharpcomclient.cs ×¢Ò⣬±àÒëÆ÷±»¸æÖªÈ¥ÒýÓÃÎÒÃÇÏÈǰʹÓÃTLBIMP´ÓÀàÐÍ¿âÉú³ÉµÄDLL¡£ ÏÖÔÚÓ¦¸Ã¿ÉÒÔÔËÐÐcsharpcomclient.exe£¬²¢ÔÚ¿ØÖÆÌ¨Éϵõ½ÈçÏÂÊä³ö£º Name is bob 10.5 ÎÒÄÜÔÚCOM³ÌÐòÖÐʹÓÃ.NET×é¼þÂ𣿠¿ÉÒÔ¡£ÔÚCOMÖУ¬¿ÉÒÔ¾ÓÉCOM¿Éµ÷Óðü×°Æ÷£¨COM Callable Wrapper£¬CCW£©À´·ÃÎÊ.NET×é¼þ¡£ÕâÀàËÆÓÚRCW£¨²Î¼ûÉÏÒ»¸öÎÊÌ⣩£¬µ«×÷ÓÃÏà·´¡£ÔÙÒ»´Î£¬¼ÙÈç°ü×°Æ÷²»ÄÜÓÉ.NET¿ª·¢¹¤¾ß×Ô¶¯Éú³É£¬»òÕß×Ô¶¯µÄÉú³ÉÐÐΪ²»ÊÇÄãÏëÒªµÄ£¬ÄÇÄã×Ô¼º¿ÉÒÔ¶¨ÖÆÒ»¸öCCW¡£»¹ÓУ¬ÒªÏëÈÃCOMÄܹ»¡°¿´µ½¡±.NET×é¼þ£¬±ØÐ뽫.NET×é¼þ×¢²áµ½×¢²á±íÖС£ Õâ¶ùÓÐÒ»¸ö¼òµ¥µÄÀý×Ó¡£ÏÈ´´½¨Ò»¸öÃûΪtestcomserver.csµÄC#Îļþ£¬°ÑÏÂÃæ´úÂë·Å½øÈ¥£º using System; namespace AndyMc { public class CSharpCOMServer { public CSharpCOMServer() {} public void SetName( string name ) { m_name = name; } public string GetName() { return m_name; } private string m_name; } } È»ºóÕâôÀ´±àÒëÕâ¸ö.csÎļþ£º csc /target:library testcomserver.cs ÄãÓ¦¸ÃÄܹ»µÃµ½Ò»¸ödll£¬¿ÉÒÔÕâÑù×¢²áËü£º regasm testcomserver.dll /tlb:testcomserver.tlb /codebase ÏÖÔÚ£¬ÐèÒª´´½¨Ò»¸ö¿Í»§³ÌÐòÀ´²âÊÔÄãµÄ.NET COM×é¼þ£¬VBScript¾Í¿ÉÒÔ¡£°ÑÏÂÃæ´úÂë·ÅÈëÒ»¸ö½Ðcomclient.vbsµÄÎļþÖУº Dim dotNetObj Set dotNetObj = CreateObject("AndyMc.CSharpCOMServer") dotNetObj.SetName ("bob") MsgBox "Name is " & dotNetObj.GetName() È»ºó£¬ÕâôÀ´Ö´ÐÐÕâ¶Î½Å±¾£º wscript comclient.vbs ÄãÓ¦¸ÃÂíÉϾÍÄÜ¿´µ½Ò»¸öÏûÏ¢¿ò£¬ÉÏÃæÐ´×Å¡°Name is bob¡±¡£ Ò»¸öÌæ´ú°ì·¨ÊÇʹÓÃÓÉJason Whittington ºÍ Don Box¿ª·¢µÄdm.net moniker£¬¿ÉÒÔµ½Õâ¶ù¿´¿´£ºhttp://staff.develop.com/jasonw/clr/readme.htm 10.6 ÔÚ.NETÊÀ½çÀATL³ÉÁ˶àÓàµÄ¶«Î÷Â𣿠û´í£¬¼ÙÈçÄãÔÚ±àдÔËÐÐÓÚ.NET frameworkÀïµÄÓ¦Óõϰ¡£µ±È»£¬Óкܶ࿪·¢ÈËÔ±¿ÉÄÜÏ£Íû¼ÌÐøÊ¹ÓÃATLÀ´±àдÔËÐÐÓÚframeworkÖ®ÍâµÄC++ COM×é¼þ£¬µ«ÊÇ£¬¼ÙÈçÄãÔÚframeworkÖ®Äڵϰ£¬Ä㽫¼¸ºõ¿ÉÒԿ϶¨ÏëʹÓÃC#¡£ÔÉúµÄC++£¨ATLµÄ»ù´¡£©ÔÚ.NETÊÀ½çÖв¢Ã»ÓÐÌ«¶àµÄλÖã¬ËüÌ«½Ó½üÓڵײ㲢ÇÒÌṩÁËÌ«¶àµÄµ¯ÐÔ£¬.NETÔËÐÐʱÄÑÒÔ¹ÜÖÆËü¡£ 11.1 .NET remoting£¨Ô¶³Ì»¯£©µÄ¹¤×÷»úÀíÊÇÔõÑùµÄ£¿ .NET remotingÉæ¼°ÑØ×ÅͨµÀ£¨channels£©·¢ËÍÏûÏ¢¡£ÓÐHTTPºÍTCPÁ½¸ö±ê׼ͨµÀ¡£TCPͨµÀÄ¿µÄ½ö½öÊÇΪÁËÓÃÓÚ¾ÖÓòÍø£¨LANs£©£¬¶øHTTPͨµÀ¼È¿ÉÒÔÓÃÓÚ¾ÖÓòÍø£¬Ò²¿ÉÒÔÓÃÓÚ¹ãÓòÍø£¨WANs£¬Internet£©¡£ ÌṩÁ˶àÖÖÏûÏ¢ÐòÁл¯¸ñʽ֧³Ö£¬ÀýÈçSOAP¸ñʽ£¨»ùÓÚXML£©ºÍ¶þ½øÖƸñʽ¡£Ä¬ÈÏÀ´Ëµ£¬HTTPͨµÀʹÓÃSOAP¸ñʽ£¨¾ÓÉ.NETÔËÐÐʱÐòÁл¯SOAP¸ñʽÆ÷£¨Serialization SOAP Formatter£©£©£¬TCPͨµÀʹÓöþ½øÖÆ·½Ê½£¨¾ÓÉ.NETÔËÐÐʱÐòÁл¯¶þ½øÖƸñʽÆ÷£¨Serialization Binary Formatter£©£©£¬ÆäʵÁ½ÖÖͨµÀ¶¼¿ÉÒÔʹÓÃÈÎÒ»ÖÖÐòÁл¯¸ñʽ¡£ ÓÐÈçÏÂһЩԶ³Ì´æÈ¡·ç¸ñ£º SingleCall£ºÀ´×Ô¿ |