﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-bubbletea</title><link>http://www.blogjava.net/bubbletea/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 18:08:43 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 18:08:43 GMT</pubDate><ttl>60</ttl><item><title>"override" VS "virtual new"</title><link>http://www.blogjava.net/bubbletea/archive/2006/02/28/32896.html</link><dc:creator>Roger的Blog</dc:creator><author>Roger的Blog</author><pubDate>Tue, 28 Feb 2006 11:14:00 GMT</pubDate><guid>http://www.blogjava.net/bubbletea/archive/2006/02/28/32896.html</guid><wfw:comment>http://www.blogjava.net/bubbletea/comments/32896.html</wfw:comment><comments>http://www.blogjava.net/bubbletea/archive/2006/02/28/32896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bubbletea/comments/commentRss/32896.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bubbletea/services/trackbacks/32896.html</trackback:ping><description><![CDATA[这两个语法从概念上看有点“逆”的意思：<BR><BR>override表示重写基类方法或事件，运行时表现出多态特性，virtual new表示覆盖基类方法，事件或内部类，两者一个是从下往上看，一个是从上往下看。<img src ="http://www.blogjava.net/bubbletea/aggbug/32896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bubbletea/" target="_blank">Roger的Blog</a> 2006-02-28 19:14 <a href="http://www.blogjava.net/bubbletea/archive/2006/02/28/32896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于event的override</title><link>http://www.blogjava.net/bubbletea/archive/2006/02/28/32894.html</link><dc:creator>Roger的Blog</dc:creator><author>Roger的Blog</author><pubDate>Tue, 28 Feb 2006 11:09:00 GMT</pubDate><guid>http://www.blogjava.net/bubbletea/archive/2006/02/28/32894.html</guid><wfw:comment>http://www.blogjava.net/bubbletea/comments/32894.html</wfw:comment><comments>http://www.blogjava.net/bubbletea/archive/2006/02/28/32894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bubbletea/comments/commentRss/32894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bubbletea/services/trackbacks/32894.html</trackback:ping><description><![CDATA[很多情况下事件由基类注册，子类引发,&nbsp; 但基类中定义的事件只能由基类引发，于是就有了override event。<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;System;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">delegate</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Del();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Base<BR><IMG id=Codehighlighter1_55_93_Open_Image onclick="this.style.display='none'; Codehighlighter1_55_93_Open_Text.style.display='none'; Codehighlighter1_55_93_Closed_Image.style.display='inline'; Codehighlighter1_55_93_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_55_93_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_55_93_Closed_Text.style.display='none'; Codehighlighter1_55_93_Open_Image.style.display='inline'; Codehighlighter1_55_93_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_55_93_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_55_93_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">virtual</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">event</SPAN><SPAN style="COLOR: #000000">&nbsp;Del&nbsp;DelEvent;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Derived:Base<BR><IMG id=Codehighlighter1_115_228_Open_Image onclick="this.style.display='none'; Codehighlighter1_115_228_Open_Text.style.display='none'; Codehighlighter1_115_228_Closed_Image.style.display='inline'; Codehighlighter1_115_228_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_115_228_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_115_228_Closed_Text.style.display='none'; Codehighlighter1_115_228_Open_Image.style.display='inline'; Codehighlighter1_115_228_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_115_228_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_115_228_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">override</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">event</SPAN><SPAN style="COLOR: #000000">&nbsp;Del&nbsp;DelEvent;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Fire()<BR><IMG id=Codehighlighter1_176_226_Open_Image onclick="this.style.display='none'; Codehighlighter1_176_226_Open_Text.style.display='none'; Codehighlighter1_176_226_Closed_Image.style.display='inline'; Codehighlighter1_176_226_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_176_226_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_176_226_Closed_Text.style.display='none'; Codehighlighter1_176_226_Open_Image.style.display='inline'; Codehighlighter1_176_226_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_176_226_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_176_226_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(DelEvent&nbsp;</SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_204_223_Open_Image onclick="this.style.display='none'; Codehighlighter1_204_223_Open_Text.style.display='none'; Codehighlighter1_204_223_Closed_Image.style.display='inline'; Codehighlighter1_204_223_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_204_223_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_204_223_Closed_Text.style.display='none'; Codehighlighter1_204_223_Open_Image.style.display='inline'; Codehighlighter1_204_223_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_204_223_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_204_223_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DelEvent();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Test<BR><IMG id=Codehighlighter1_242_440_Open_Image onclick="this.style.display='none'; Codehighlighter1_242_440_Open_Text.style.display='none'; Codehighlighter1_242_440_Closed_Image.style.display='inline'; Codehighlighter1_242_440_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_242_440_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_242_440_Closed_Text.style.display='none'; Codehighlighter1_242_440_Open_Image.style.display='inline'; Codehighlighter1_242_440_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_242_440_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_242_440_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Print()<BR><IMG id=Codehighlighter1_266_299_Open_Image onclick="this.style.display='none'; Codehighlighter1_266_299_Open_Text.style.display='none'; Codehighlighter1_266_299_Closed_Image.style.display='inline'; Codehighlighter1_266_299_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_266_299_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_266_299_Closed_Text.style.display='none'; Codehighlighter1_266_299_Open_Image.style.display='inline'; Codehighlighter1_266_299_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_266_299_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_266_299_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Print</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Main()<BR><IMG id=Codehighlighter1_329_438_Open_Image onclick="this.style.display='none'; Codehighlighter1_329_438_Open_Text.style.display='none'; Codehighlighter1_329_438_Closed_Image.style.display='inline'; Codehighlighter1_329_438_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_329_438_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_329_438_Closed_Text.style.display='none'; Codehighlighter1_329_438_Open_Image.style.display='inline'; Codehighlighter1_329_438_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_329_438_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_329_438_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test&nbsp;t&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Test();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Base&nbsp;b&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Derived();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.DelEvent&nbsp;</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Del(t.Print);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((Derived)b).Fire();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>下面显示错误引发方式：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;System;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">delegate</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Del();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Base<BR><IMG id=Codehighlighter1_55_85_Open_Image onclick="this.style.display='none'; Codehighlighter1_55_85_Open_Text.style.display='none'; Codehighlighter1_55_85_Closed_Image.style.display='inline'; Codehighlighter1_55_85_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_55_85_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_55_85_Closed_Text.style.display='none'; Codehighlighter1_55_85_Open_Image.style.display='inline'; Codehighlighter1_55_85_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_55_85_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_55_85_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">event</SPAN><SPAN style="COLOR: #000000">&nbsp;Del&nbsp;DelEvent;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Derived:Base<BR><IMG id=Codehighlighter1_107_192_Open_Image onclick="this.style.display='none'; Codehighlighter1_107_192_Open_Text.style.display='none'; Codehighlighter1_107_192_Closed_Image.style.display='inline'; Codehighlighter1_107_192_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_107_192_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_107_192_Closed_Text.style.display='none'; Codehighlighter1_107_192_Open_Image.style.display='inline'; Codehighlighter1_107_192_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_107_192_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_107_192_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Fire()<BR><IMG id=Codehighlighter1_130_190_Open_Image onclick="this.style.display='none'; Codehighlighter1_130_190_Open_Text.style.display='none'; Codehighlighter1_130_190_Closed_Image.style.display='inline'; Codehighlighter1_130_190_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_130_190_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_130_190_Closed_Text.style.display='none'; Codehighlighter1_130_190_Open_Image.style.display='inline'; Codehighlighter1_130_190_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_130_190_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_130_190_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(</SPAN><SPAN style="COLOR: #0000ff">base</SPAN><SPAN style="COLOR: #000000">.DelEvent&nbsp;</SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_163_187_Open_Image onclick="this.style.display='none'; Codehighlighter1_163_187_Open_Text.style.display='none'; Codehighlighter1_163_187_Closed_Image.style.display='inline'; Codehighlighter1_163_187_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_163_187_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_163_187_Closed_Text.style.display='none'; Codehighlighter1_163_187_Open_Image.style.display='inline'; Codehighlighter1_163_187_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_163_187_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_163_187_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">base</SPAN><SPAN style="COLOR: #000000">.DelEvent();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Test<BR><IMG id=Codehighlighter1_206_404_Open_Image onclick="this.style.display='none'; Codehighlighter1_206_404_Open_Text.style.display='none'; Codehighlighter1_206_404_Closed_Image.style.display='inline'; Codehighlighter1_206_404_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_206_404_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_206_404_Closed_Text.style.display='none'; Codehighlighter1_206_404_Open_Image.style.display='inline'; Codehighlighter1_206_404_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_206_404_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_206_404_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Print()<BR><IMG id=Codehighlighter1_230_263_Open_Image onclick="this.style.display='none'; Codehighlighter1_230_263_Open_Text.style.display='none'; Codehighlighter1_230_263_Closed_Image.style.display='inline'; Codehighlighter1_230_263_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_230_263_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_230_263_Closed_Text.style.display='none'; Codehighlighter1_230_263_Open_Image.style.display='inline'; Codehighlighter1_230_263_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_230_263_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_230_263_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Print</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Main()<BR><IMG id=Codehighlighter1_293_402_Open_Image onclick="this.style.display='none'; Codehighlighter1_293_402_Open_Text.style.display='none'; Codehighlighter1_293_402_Closed_Image.style.display='inline'; Codehighlighter1_293_402_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_293_402_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_293_402_Closed_Text.style.display='none'; Codehighlighter1_293_402_Open_Image.style.display='inline'; Codehighlighter1_293_402_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_293_402_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_293_402_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test&nbsp;t&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Test();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Base&nbsp;b&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Derived();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.DelEvent&nbsp;</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Del(t.Print);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((Derived)b).Fire();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV><BR>也可以避免使用override event，如下：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;System;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">delegate</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Del();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Base<BR><IMG id=Codehighlighter1_55_166_Open_Image onclick="this.style.display='none'; Codehighlighter1_55_166_Open_Text.style.display='none'; Codehighlighter1_55_166_Closed_Image.style.display='inline'; Codehighlighter1_55_166_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_55_166_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_55_166_Closed_Text.style.display='none'; Codehighlighter1_55_166_Open_Image.style.display='inline'; Codehighlighter1_55_166_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_55_166_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_55_166_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">event</SPAN><SPAN style="COLOR: #000000">&nbsp;Del&nbsp;DelEvent;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">protected</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;FireEvent()<BR><IMG id=Codehighlighter1_114_164_Open_Image onclick="this.style.display='none'; Codehighlighter1_114_164_Open_Text.style.display='none'; Codehighlighter1_114_164_Closed_Image.style.display='inline'; Codehighlighter1_114_164_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_114_164_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_114_164_Closed_Text.style.display='none'; Codehighlighter1_114_164_Open_Image.style.display='inline'; Codehighlighter1_114_164_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_114_164_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_114_164_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(DelEvent&nbsp;</SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_142_161_Open_Image onclick="this.style.display='none'; Codehighlighter1_142_161_Open_Text.style.display='none'; Codehighlighter1_142_161_Closed_Image.style.display='inline'; Codehighlighter1_142_161_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_142_161_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_142_161_Closed_Text.style.display='none'; Codehighlighter1_142_161_Open_Image.style.display='inline'; Codehighlighter1_142_161_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_142_161_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_142_161_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DelEvent();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Derived:Base<BR><IMG id=Codehighlighter1_188_236_Open_Image onclick="this.style.display='none'; Codehighlighter1_188_236_Open_Text.style.display='none'; Codehighlighter1_188_236_Closed_Image.style.display='inline'; Codehighlighter1_188_236_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_188_236_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_188_236_Closed_Text.style.display='none'; Codehighlighter1_188_236_Open_Image.style.display='inline'; Codehighlighter1_188_236_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_188_236_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_188_236_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Fire()<BR><IMG id=Codehighlighter1_211_234_Open_Image onclick="this.style.display='none'; Codehighlighter1_211_234_Open_Text.style.display='none'; Codehighlighter1_211_234_Closed_Image.style.display='inline'; Codehighlighter1_211_234_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_211_234_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_211_234_Closed_Text.style.display='none'; Codehighlighter1_211_234_Open_Image.style.display='inline'; Codehighlighter1_211_234_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_211_234_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_211_234_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">base</SPAN><SPAN style="COLOR: #000000">.FireEvent();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Test<BR><IMG id=Codehighlighter1_250_448_Open_Image onclick="this.style.display='none'; Codehighlighter1_250_448_Open_Text.style.display='none'; Codehighlighter1_250_448_Closed_Image.style.display='inline'; Codehighlighter1_250_448_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_250_448_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_250_448_Closed_Text.style.display='none'; Codehighlighter1_250_448_Open_Image.style.display='inline'; Codehighlighter1_250_448_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_250_448_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_250_448_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Print()<BR><IMG id=Codehighlighter1_274_307_Open_Image onclick="this.style.display='none'; Codehighlighter1_274_307_Open_Text.style.display='none'; Codehighlighter1_274_307_Closed_Image.style.display='inline'; Codehighlighter1_274_307_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_274_307_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_274_307_Closed_Text.style.display='none'; Codehighlighter1_274_307_Open_Image.style.display='inline'; Codehighlighter1_274_307_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_274_307_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_274_307_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Print</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Main()<BR><IMG id=Codehighlighter1_337_446_Open_Image onclick="this.style.display='none'; Codehighlighter1_337_446_Open_Text.style.display='none'; Codehighlighter1_337_446_Closed_Image.style.display='inline'; Codehighlighter1_337_446_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_337_446_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_337_446_Closed_Text.style.display='none'; Codehighlighter1_337_446_Open_Image.style.display='inline'; Codehighlighter1_337_446_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_337_446_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_337_446_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test&nbsp;t&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Test();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Base&nbsp;b&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Derived();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.DelEvent&nbsp;</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Del(t.Print);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((Derived)b).Fire();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV><img src ="http://www.blogjava.net/bubbletea/aggbug/32894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bubbletea/" target="_blank">Roger的Blog</a> 2006-02-28 19:09 <a href="http://www.blogjava.net/bubbletea/archive/2006/02/28/32894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MO连ArcSDE</title><link>http://www.blogjava.net/bubbletea/archive/2006/02/26/32491.html</link><dc:creator>Roger的Blog</dc:creator><author>Roger的Blog</author><pubDate>Sun, 26 Feb 2006 05:29:00 GMT</pubDate><guid>http://www.blogjava.net/bubbletea/archive/2006/02/26/32491.html</guid><wfw:comment>http://www.blogjava.net/bubbletea/comments/32491.html</wfw:comment><comments>http://www.blogjava.net/bubbletea/archive/2006/02/26/32491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bubbletea/comments/commentRss/32491.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bubbletea/services/trackbacks/32491.html</trackback:ping><description><![CDATA[<P>版本：MapObjects2.2, ArcSDE8.2<BR><BR>连接参数: </P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">1</SPAN><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">pDataSrc.mDataConnection.Server&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;sde82:hostname</SPAN><SPAN style="COLOR: #000000">/</SPAN><SPAN style="COLOR: #000000">ip<BR></SPAN><SPAN style="COLOR: #008080">2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>pDataSrc.mDataConnection.Database&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;instance</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">port:</SPAN><SPAN style="COLOR: #000000">5151</SPAN><SPAN style="COLOR: #000000">;database</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">databaseName;<BR></SPAN><SPAN style="COLOR: #008080">3</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>pDataSrc.mDataConnection.User&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;userName<BR></SPAN><SPAN style="COLOR: #008080">4</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>pDataSrc.mDataConnection.Password&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;password</SPAN></DIV><BR>其他问题：<BR><BR>主意SQLServer中用户的权限，确定防火墙已关，处于不同的域或工作组没有影响，可以采用DeskTop客户端做测试。<img src ="http://www.blogjava.net/bubbletea/aggbug/32491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bubbletea/" target="_blank">Roger的Blog</a> 2006-02-26 13:29 <a href="http://www.blogjava.net/bubbletea/archive/2006/02/26/32491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#对象级版本控制（3）</title><link>http://www.blogjava.net/bubbletea/archive/2006/01/21/28894.html</link><dc:creator>Roger的Blog</dc:creator><author>Roger的Blog</author><pubDate>Sat, 21 Jan 2006 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/bubbletea/archive/2006/01/21/28894.html</guid><wfw:comment>http://www.blogjava.net/bubbletea/comments/28894.html</wfw:comment><comments>http://www.blogjava.net/bubbletea/archive/2006/01/21/28894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bubbletea/comments/commentRss/28894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bubbletea/services/trackbacks/28894.html</trackback:ping><description><![CDATA[对于这种情况，我觉得v.s.中第一种比较合适。<BR><IMG height=272 alt=vc1.bmp src="http://www.blogjava.net/images/blogjava_net/bubbletea/VersionControl/vc1.bmp" width=418 border=0><IMG height=305 alt=vc2.bmp src="http://www.blogjava.net/images/blogjava_net/bubbletea/VersionControl/vc2.bmp" width=415 border=0><BR><IMG height=209 alt=vc3.bmp src="http://www.blogjava.net/images/blogjava_net/bubbletea/VersionControl/vc3.bmp" width=367 border=0><img src ="http://www.blogjava.net/bubbletea/aggbug/28894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bubbletea/" target="_blank">Roger的Blog</a> 2006-01-21 20:49 <a href="http://www.blogjava.net/bubbletea/archive/2006/01/21/28894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#对象级版本控制（2）（实现代码）</title><link>http://www.blogjava.net/bubbletea/archive/2006/01/21/28893.html</link><dc:creator>Roger的Blog</dc:creator><author>Roger的Blog</author><pubDate>Sat, 21 Jan 2006 12:43:00 GMT</pubDate><guid>http://www.blogjava.net/bubbletea/archive/2006/01/21/28893.html</guid><wfw:comment>http://www.blogjava.net/bubbletea/comments/28893.html</wfw:comment><comments>http://www.blogjava.net/bubbletea/archive/2006/01/21/28893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bubbletea/comments/commentRss/28893.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bubbletea/services/trackbacks/28893.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;DiffInfo&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;int&nbsp;_versionNum;&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/bubbletea/archive/2006/01/21/28893.html'>阅读全文</a><img src ="http://www.blogjava.net/bubbletea/aggbug/28893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bubbletea/" target="_blank">Roger的Blog</a> 2006-01-21 20:43 <a href="http://www.blogjava.net/bubbletea/archive/2006/01/21/28893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#对象级版本控制（1）</title><link>http://www.blogjava.net/bubbletea/archive/2006/01/21/28891.html</link><dc:creator>Roger的Blog</dc:creator><author>Roger的Blog</author><pubDate>Sat, 21 Jan 2006 12:32:00 GMT</pubDate><guid>http://www.blogjava.net/bubbletea/archive/2006/01/21/28891.html</guid><wfw:comment>http://www.blogjava.net/bubbletea/comments/28891.html</wfw:comment><comments>http://www.blogjava.net/bubbletea/archive/2006/01/21/28891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bubbletea/comments/commentRss/28891.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bubbletea/services/trackbacks/28891.html</trackback:ping><description><![CDATA[只是个想法而已，做了如下试验，说明如下：
<P>1。C#所有类型都继承自object类型，所以只要实现对object的版本控制就能保证对其他类型同样具有这种能力。 </P>
<P>2。采用.net的反射机制可以得到运行时具体对象的类型信息，包括所有字段和方法。Diffinfo类以字段为最小单位记录某一对象不同版本间的差异。 </P>
<P>3。VersionController类包含一个HeadVersion类型的对象和一个BranchVersion类型的对象集合。Head版本的对象及其信息被存储在HeadVersion中，用户可以决定在任意时刻从当前的Head版本开辟一个分支，该分支被加入到BranchVersion的对象集合中。HeadVersion和BranchVersion都继承自CommonVerision。 </P>
<P>4。用户通过VersionController实现对当前版本对象或某一分支对象的操作（对于分支需指定其分支name）每次决定step version时，HeadVersion或BranchVersion对版本号自增，并将差异信息存储在一个DiffInfo类型的对象集合中。HeadVersion和BranchVersion都保留一个被创建时的original对象版本，这里的差异信息是以这个版本为参照系。 </P>
<P>5。通过VersionController还可以建立tag标记，即为HeadVersion或BranchVersion的CurrVersion拍一张快照，并指定一个名称存储在一个tagList中，当然tag也可以从tagList中删除。通过VersionController还可以查询版本信息。 <BR><BR><IMG height=817 alt=VersionController.jpg src="http://www.blogjava.net/images/blogjava_net/bubbletea/VersionControl/VersionController.jpg" width=755 border=0><BR>存在问题示例：</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">&nbsp;1</SPAN><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;A<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;2</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_15_93_Open_Image onclick="this.style.display='none'; Codehighlighter1_15_93_Open_Text.style.display='none'; Codehighlighter1_15_93_Closed_Image.style.display='inline'; Codehighlighter1_15_93_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_15_93_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_15_93_Closed_Text.style.display='none'; Codehighlighter1_15_93_Open_Image.style.display='inline'; Codehighlighter1_15_93_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_15_93_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_15_93_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;3</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;B&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;B();<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;4</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;t1&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;5</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;t2&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">t2</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;6</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;7</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;8</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;B<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;9</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_104_184_Open_Image onclick="this.style.display='none'; Codehighlighter1_104_184_Open_Text.style.display='none'; Codehighlighter1_104_184_Closed_Image.style.display='inline'; Codehighlighter1_104_184_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_104_184_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_104_184_Closed_Text.style.display='none'; Codehighlighter1_104_184_Open_Image.style.display='inline'; Codehighlighter1_104_184_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_104_184_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_104_184_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">10</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;t3&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">5</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">11</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;t4&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">t4</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">12</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">float</SPAN><SPAN style="COLOR: #000000">&nbsp;t5&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;5f;<BR></SPAN><SPAN style="COLOR: #008080">13</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>当对类型A的对象进行版本控制时，由于B类型的对象所占的字节数大于A的50％以上，所以当诸如B.t3之类的对象发生更新时整个B类型对象都要被保存一个副本，这显然是不合适的，我的解决方案是引入ignore字段，对诸如B这种类型的对象忽略其值的更新，并对B本身添加一个版本控制。<img src ="http://www.blogjava.net/bubbletea/aggbug/28891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bubbletea/" target="_blank">Roger的Blog</a> 2006-01-21 20:32 <a href="http://www.blogjava.net/bubbletea/archive/2006/01/21/28891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>框架要开刀了！！！</title><link>http://www.blogjava.net/bubbletea/archive/2006/01/18/28531.html</link><dc:creator>Roger的Blog</dc:creator><author>Roger的Blog</author><pubDate>Wed, 18 Jan 2006 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/bubbletea/archive/2006/01/18/28531.html</guid><wfw:comment>http://www.blogjava.net/bubbletea/comments/28531.html</wfw:comment><comments>http://www.blogjava.net/bubbletea/archive/2006/01/18/28531.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bubbletea/comments/commentRss/28531.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bubbletea/services/trackbacks/28531.html</trackback:ping><description><![CDATA[经过半个月的修修补补，现在的框架虽然起色不少，可由于结构等问题还是暴露出发展的瓶颈，老板开话说要改，于是这礼拜开始要给框架动个大手术，直接从cvs里签了个分支出来，不说轰轰烈烈，也算是振奋人心。可惜年关将至，不知何时才能回家。<img src ="http://www.blogjava.net/bubbletea/aggbug/28531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bubbletea/" target="_blank">Roger的Blog</a> 2006-01-18 17:05 <a href="http://www.blogjava.net/bubbletea/archive/2006/01/18/28531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>下午调了个超变态的异常</title><link>http://www.blogjava.net/bubbletea/archive/2006/01/12/27781.html</link><dc:creator>Roger的Blog</dc:creator><author>Roger的Blog</author><pubDate>Thu, 12 Jan 2006 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/bubbletea/archive/2006/01/12/27781.html</guid><wfw:comment>http://www.blogjava.net/bubbletea/comments/27781.html</wfw:comment><comments>http://www.blogjava.net/bubbletea/archive/2006/01/12/27781.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/bubbletea/comments/commentRss/27781.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bubbletea/services/trackbacks/27781.html</trackback:ping><description><![CDATA[从一个TabControl的第一个TabPage切换到secondary TabPage，跳出如下异常：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">An&nbsp;unhandled&nbsp;exception&nbsp;of&nbsp;type&nbsp;'System.ArgumentNullException'&nbsp;occurred&nbsp;in&nbsp;system.windows.forms.dll<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>Additional&nbsp;information:&nbsp;Value&nbsp;cannot&nbsp;be&nbsp;null.</SPAN></DIV>于是采用try...catch的方式debug到如下信息：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">items</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;mess&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Value&nbsp;cannot&nbsp;be&nbsp;null.\r\nParameter&nbsp;name:&nbsp;items</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">System.Windows.Forms</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;&nbsp;&nbsp;&nbsp;null&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>-&nbsp;&nbsp;&nbsp;&nbsp;ex&nbsp;&nbsp;&nbsp;&nbsp;{</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Value&nbsp;cannot&nbsp;be&nbsp;null.\r\nParameter&nbsp;name:&nbsp;items</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;System.ArgumentNullException<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>-&nbsp;&nbsp;&nbsp;&nbsp;System.ArgumentException&nbsp;&nbsp;&nbsp;&nbsp;{</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Value&nbsp;cannot&nbsp;be&nbsp;null.\r\nParameter&nbsp;name:&nbsp;items</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;System.ArgumentException<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>-&nbsp;&nbsp;&nbsp;&nbsp;System.SystemException&nbsp;&nbsp;&nbsp;&nbsp;{</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Value&nbsp;cannot&nbsp;be&nbsp;null.\r\nParameter&nbsp;name:&nbsp;items</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">}&nbsp;&nbsp;&nbsp;&nbsp;System.SystemException<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>-&nbsp;&nbsp;&nbsp;&nbsp;System.Exception&nbsp;&nbsp;&nbsp;&nbsp;{</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Value&nbsp;cannot&nbsp;be&nbsp;null.\r\nParameter&nbsp;name:&nbsp;items</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;System.Exception<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;System.Object&nbsp;&nbsp;&nbsp;&nbsp;{System.ArgumentNullException}&nbsp;&nbsp;&nbsp;&nbsp;System.Object<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_className&nbsp;&nbsp;&nbsp;&nbsp;null&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_COMPlusExceptionCode&nbsp;&nbsp;&nbsp;&nbsp;-</SPAN><SPAN style="COLOR: #000000">532459699</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;int<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_exceptionMethod&nbsp;&nbsp;&nbsp;&nbsp;&lt;undefined&nbsp;value&gt;&nbsp;&nbsp;&nbsp;&nbsp;System.Reflection.MethodBase<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_exceptionMethodString&nbsp;&nbsp;&nbsp;&nbsp;null&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_helpURL&nbsp;&nbsp;&nbsp;&nbsp;null&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_HResult&nbsp;&nbsp;&nbsp;&nbsp;-</SPAN><SPAN style="COLOR: #000000">2147467261</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;int<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_innerException&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;System.Exception<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_message&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Value&nbsp;cannot&nbsp;be&nbsp;null.</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_remoteStackIndex&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;int<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_remoteStackTraceString&nbsp;&nbsp;&nbsp;&nbsp;null&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_source&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">System.Windows.Forms</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>+&nbsp;&nbsp;&nbsp;&nbsp;_stackTrace&nbsp;&nbsp;&nbsp;&nbsp;{System.Array}&nbsp;&nbsp;&nbsp;&nbsp;System.Object<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_stackTraceString&nbsp;&nbsp;&nbsp;&nbsp;null&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_xcode&nbsp;&nbsp;&nbsp;&nbsp;-</SPAN><SPAN style="COLOR: #000000">532459699</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;int<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_xptrs&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;int<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HelpLink&nbsp;&nbsp;&nbsp;&nbsp;null&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HResult&nbsp;&nbsp;&nbsp;&nbsp;-</SPAN><SPAN style="COLOR: #000000">2147467261</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;int<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;InnerException&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;System.Exception<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Message&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Value&nbsp;cannot&nbsp;be&nbsp;null.\r\nParameter&nbsp;name:&nbsp;items</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Source&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">System.Windows.Forms</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;StackTrace&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.SetVisibleCore(Boolean&nbsp;value)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.set_Visible(Boolean&nbsp;value)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.TabPage.set_Visible(Boolean&nbsp;value)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.TabControl.UpdateTabSelection(Boolean&nbsp;uiselected)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.TabControl.OnSelectedIndexChanged(EventArgs&nbsp;e)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.TabControl.WmSelChange(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.TabControl.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.ControlNativeWindow.OnMessage(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.ControlNativeWindow.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr&nbsp;hWnd,&nbsp;Int32&nbsp;msg,&nbsp;IntPtr&nbsp;wparam,&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>IntPtr&nbsp;lparam)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.UnsafeNativeMethods.SendMessage(HandleRef&nbsp;hWnd,&nbsp;Int32&nbsp;msg,&nbsp;IntPtr&nbsp;wParam,&nbsp;IntPtr&nbsp;lParam)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.Control.SendMessage(Int32&nbsp;msg,&nbsp;IntPtr&nbsp;wparam,&nbsp;IntPtr&nbsp;lparam)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.ReflectMessageInternal(IntPtr&nbsp;hWnd,&nbsp;Message&amp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.WmNotify(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.ScrollableControl.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.ControlNativeWindow.OnMessage(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.ControlNativeWindow.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr&nbsp;hWnd,&nbsp;Int32&nbsp;msg,&nbsp;IntPtr&nbsp;wparam,&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>IntPtr&nbsp;lparam)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr&nbsp;wndProc,&nbsp;IntPtr&nbsp;hWnd,&nbsp;Int32&nbsp;msg,&nbsp;IntPtr&nbsp;wParam,&nbsp;IntPtr&nbsp;lParam)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.NativeWindow.DefWndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.DefWndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.Control.WmMouseDown(Message&amp;&nbsp;m,&nbsp;MouseButtons&nbsp;button,&nbsp;Int32&nbsp;clicks)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.TabControl.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.ControlNativeWindow.OnMessage(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.ControlNativeWindow.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr&nbsp;hWnd,&nbsp;Int32&nbsp;msg,&nbsp;IntPtr&nbsp;wparam,&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>IntPtr&nbsp;lparam)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&amp;&nbsp;msg)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.ComponentManager.System.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoop(Int32&nbsp;dwComponentID,&nbsp;Int32&nbsp;reason,&nbsp;Int32&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>pvLoopData)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.ThreadContext.RunMessageLoopInner(Int32&nbsp;reason,&nbsp;ApplicationContext&nbsp;context)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.ThreadContext.RunMessageLoop(Int32&nbsp;reason,&nbsp;ApplicationContext&nbsp;context)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Application.Run(Form&nbsp;mainForm)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>GISUDP.frmMain.Main()&nbsp;in&nbsp;e:\\qf\\emergencyframework\\gisudp20\\gisudp\\frmmain.cs:line&nbsp;584</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>-&nbsp;&nbsp;&nbsp;&nbsp;TargetSite&nbsp;&nbsp;&nbsp;&nbsp;{System.Reflection.RuntimeMethodInfo}&nbsp;&nbsp;&nbsp;&nbsp;System.Reflection.MethodBase<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>+&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">[</SPAN><SPAN style="COLOR: #800000">System.Reflection.RuntimeMethodInfo</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">]</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{System.Reflection.RuntimeMethodInfo}&nbsp;&nbsp;&nbsp;&nbsp;System.Reflection.RuntimeMethodInfo<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>+&nbsp;&nbsp;&nbsp;&nbsp;System.Reflection.MemberInfo&nbsp;&nbsp;&nbsp;&nbsp;{System.Reflection.RuntimeMethodInfo}&nbsp;&nbsp;&nbsp;&nbsp;System.Reflection.MemberInfo<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Attributes&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">452</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;System.Reflection.MethodAttributes<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CallingConvention&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">33</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;System.Reflection.CallingConventions<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsAbstract&nbsp;&nbsp;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsAssembly&nbsp;&nbsp;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsConstructor&nbsp;&nbsp;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsFamily&nbsp;&nbsp;&nbsp;&nbsp;true&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsFamilyAndAssembly&nbsp;&nbsp;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsFamilyOrAssembly&nbsp;&nbsp;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsFinal&nbsp;&nbsp;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsHideBySig&nbsp;&nbsp;&nbsp;&nbsp;true&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsOverloaded&nbsp;&nbsp;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsPrivate&nbsp;&nbsp;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsPublic&nbsp;&nbsp;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsSpecialName&nbsp;&nbsp;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsStatic&nbsp;&nbsp;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IsVirtual&nbsp;&nbsp;&nbsp;&nbsp;true&nbsp;&nbsp;&nbsp;&nbsp;bool<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>+&nbsp;&nbsp;&nbsp;&nbsp;MethodHandle&nbsp;&nbsp;&nbsp;&nbsp;{System.RuntimeMethodHandle}&nbsp;&nbsp;&nbsp;&nbsp;System.RuntimeMethodHandle<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_paramName&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">items</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Message&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Value&nbsp;cannot&nbsp;be&nbsp;null.\r\nParameter&nbsp;name:&nbsp;items</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ParamName&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">items</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_nullMessage&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Value&nbsp;cannot&nbsp;be&nbsp;null.</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;NullMessage&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Value&nbsp;cannot&nbsp;be&nbsp;null.</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;string<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV>令我感兴趣的是中间这段：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;StackTrace&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.SetVisibleCore(Boolean&nbsp;value)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.set_Visible(Boolean&nbsp;value)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.TabPage.set_Visible(Boolean&nbsp;value)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.TabControl.UpdateTabSelection(Boolean&nbsp;uiselected)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.TabControl.OnSelectedIndexChanged(EventArgs&nbsp;e)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.TabControl.WmSelChange(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.TabControl.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.ControlNativeWindow.OnMessage(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.ControlNativeWindow.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr&nbsp;hWnd,&nbsp;Int32&nbsp;msg,&nbsp;IntPtr&nbsp;wparam,&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>IntPtr&nbsp;lparam)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.UnsafeNativeMethods.SendMessage(HandleRef&nbsp;hWnd,&nbsp;Int32&nbsp;msg,&nbsp;IntPtr&nbsp;wParam,&nbsp;IntPtr&nbsp;lParam)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.Control.SendMessage(Int32&nbsp;msg,&nbsp;IntPtr&nbsp;wparam,&nbsp;IntPtr&nbsp;lparam)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.ReflectMessageInternal(IntPtr&nbsp;hWnd,&nbsp;Message&amp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.WmNotify(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.ScrollableControl.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.ControlNativeWindow.OnMessage(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.ControlNativeWindow.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr&nbsp;hWnd,&nbsp;Int32&nbsp;msg,&nbsp;IntPtr&nbsp;wparam,&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>IntPtr&nbsp;lparam)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr&nbsp;wndProc,&nbsp;IntPtr&nbsp;hWnd,&nbsp;Int32&nbsp;msg,&nbsp;IntPtr&nbsp;wParam,&nbsp;IntPtr&nbsp;lParam)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.NativeWindow.DefWndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.DefWndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.Control.WmMouseDown(Message&amp;&nbsp;m,&nbsp;MouseButtons&nbsp;button,&nbsp;Int32&nbsp;clicks)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Control.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.TabControl.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.ControlNativeWindow.OnMessage(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.ControlNativeWindow.WndProc(Message&amp;&nbsp;m)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr&nbsp;hWnd,&nbsp;Int32&nbsp;msg,&nbsp;IntPtr&nbsp;wparam,&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>IntPtr&nbsp;lparam)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&amp;&nbsp;msg)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.ComponentManager.System.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoop(Int32&nbsp;dwComponentID,&nbsp;Int32&nbsp;reason,&nbsp;Int32&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>pvLoopData)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.ThreadContext.RunMessageLoopInner(Int32&nbsp;reason,&nbsp;ApplicationContext&nbsp;context)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>System.Windows.Forms.ThreadContext.RunMessageLoop(Int32&nbsp;reason,&nbsp;ApplicationContext&nbsp;context)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;System.Windows.Forms.Application.Run(Form&nbsp;mainForm)\r\n&nbsp;&nbsp;&nbsp;at&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>GISUDP.frmMain.Main()&nbsp;in&nbsp;e:\\qf\\emergencyframework\\gisudp20\\gisudp\\frmmain.cs:line&nbsp;584</SPAN><SPAN style="COLOR: #000000">"</SPAN></DIV>可是想了半天，这里的set_Visible都不可能是客户代码的问题，我在网上也查了下，基本没有解决方案，另外发现有个老外超搞，说直接把TabPage的Visible置为true就好了，也不知道他的TabPage是什么版本的，竟然有public的Visible属性。我的程序是可以运行在不同GIS平台上的二次开发框架，这个问题是出在连MO时的，换了个平台就没有这个问题了，于是我从跟MO有关的代码出发，通过查找上面stacktrack里的items，终于发现了问题：原来在第二个TabPage的onload是我调用了如下代码：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.cbTextField&nbsp;.Items&nbsp;.AddRange&nbsp;(items);</SPAN></DIV>而items由于疏忽传了空值，所以产生了上面的异常，我估计TabControl在把secondary TabPage的visible设置为true时调用了它的onload消息，所以才抛出'System.ArgumentNullException'的异常。<img src ="http://www.blogjava.net/bubbletea/aggbug/27781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bubbletea/" target="_blank">Roger的Blog</a> 2006-01-12 16:33 <a href="http://www.blogjava.net/bubbletea/archive/2006/01/12/27781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#中关于delegate的接口实现(3)</title><link>http://www.blogjava.net/bubbletea/archive/2006/01/09/27296.html</link><dc:creator>Roger的Blog</dc:creator><author>Roger的Blog</author><pubDate>Mon, 09 Jan 2006 10:59:00 GMT</pubDate><guid>http://www.blogjava.net/bubbletea/archive/2006/01/09/27296.html</guid><wfw:comment>http://www.blogjava.net/bubbletea/comments/27296.html</wfw:comment><comments>http://www.blogjava.net/bubbletea/archive/2006/01/09/27296.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bubbletea/comments/commentRss/27296.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bubbletea/services/trackbacks/27296.html</trackback:ping><description><![CDATA[delegate的使用实质是函数接口，某些C＋＋程序员认为是函数指针，意思一样，而event则是实现了某一函数接口的一堆函数的集合，当然delegate本身也有这一特性，但相比之下event更规范和安全。无论是delegate还是event，在实现数据，GUI分离时能发挥巨大作用。<img src ="http://www.blogjava.net/bubbletea/aggbug/27296.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bubbletea/" target="_blank">Roger的Blog</a> 2006-01-09 18:59 <a href="http://www.blogjava.net/bubbletea/archive/2006/01/09/27296.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天遇到的两个问题都跟“依赖”有关</title><link>http://www.blogjava.net/bubbletea/archive/2006/01/09/27294.html</link><dc:creator>Roger的Blog</dc:creator><author>Roger的Blog</author><pubDate>Mon, 09 Jan 2006 10:53:00 GMT</pubDate><guid>http://www.blogjava.net/bubbletea/archive/2006/01/09/27294.html</guid><wfw:comment>http://www.blogjava.net/bubbletea/comments/27294.html</wfw:comment><comments>http://www.blogjava.net/bubbletea/archive/2006/01/09/27294.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bubbletea/comments/commentRss/27294.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bubbletea/services/trackbacks/27294.html</trackback:ping><description><![CDATA[上午遇到的情况是我在使用一个UserControl前，事先将依赖的dll引用，然后就出现了神经错乱的情况：有关的控件都面目全非；tasklist出现了multi-ref错误。后来才发现是拉入控件时ide自己又加了一次相同的引用。记得是CS1559。<BR>下午遇到的情况是项目中的某一控件莫名奇妙的没了，而且控件无法被再次拖入，出现create instance exception，全公司束手无策，无奈，我查了半天，终于发现问题所在，原来是我在更新cvs时，只更新了改动的dll，没有更新它所依赖的其他dll，猜测这样导致控件在design time时出现异常。恩，就是这样了。<img src ="http://www.blogjava.net/bubbletea/aggbug/27294.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bubbletea/" target="_blank">Roger的Blog</a> 2006-01-09 18:53 <a href="http://www.blogjava.net/bubbletea/archive/2006/01/09/27294.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>