
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
	<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head><card id="MainCard" title="&#x6B22;&#x8FCE;&#x5149;&#x4E34;"><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a><br/>&nbsp;</p><p><b>&#x6807;&#x9898;&#x3A;</b> &#x45;&#x66;&#x66;&#x65;&#x63;&#x74;&#x69;&#x76;&#x65;&#x20;&#x43;&#x23;&#x20;&#x539F;&#x5219;&#x32;&#x37;&#xFF1A;&#x907F;&#x514D;&#x4F7F;&#x7528;&#x49;&#x43;&#x6C;&#x6F;&#x6E;&#x65;&#x61;&#x62;&#x6C;&#x65;</p><p><b>&#x4F5C;&#x8005;&#x3A;</b> &#x64;&#x6E;&#x61;&#x77;&#x6F;</p><p><b>&#x65E5;&#x671F;&#x3A;</b> &#x32;&#x30;&#x31;&#x30;&#x2D;&#x30;&#x31;&#x2D;&#x30;&#x31;&#x20;&#x31;&#x30;&#x3A;&#x32;&#x36;&#x20;&#x41;&#x4D;</p><p><b>&#x5206;&#x7C7B;&#x3A;</b> <a href="wap.asp?do=showLog&amp;cateID=5">&#x57;&#x65;&#x62;&#x7F16;&#x7A0B;</a></p><p><b>&#x5185;&#x5BB9;&#x3A;</b> ICloneable&#x770B;&#x4E0A;&#x53BB;&#x662F;&#x4E2A;&#x4E0D;&#x9519;&#x7684;&#x4E3B;&#x610F;&#xFF1A;&#x4E3A;&#x4E00;&#x4E2A;&#x7C7B;&#x578B;&#x5B9E;&#x73B0;ICloneable&#x63A5;&#x53E3;&#x540E;&#x5C31;&#x53EF;&#x4EE5;&#x652F;&#x6301;&#x62F7;&#x8D1D;&#x4E86;&#x3002;&#x5982;&#x679C;&#x4F60;&#x4E0D;&#x60F3;&#x652F;&#x6301;&#x62F7;&#x8D1D;&#xFF0C;&#x5C31;&#x4E0D;&#x8981;&#x5B9E;&#x73B0;&#x5B83;&#x3002;<br/>&#x4F46;&#x4F60;&#x7684;&#x5BF9;&#x8C61;&#x5E76;&#x4E0D;&#x662F;&#x5728;&#x4E00;&#x4E2A;&#x201C;&#x771F;&#x7A7A;&#x201D;&#x7684;&#x73AF;&#x5883;&#x4E2D;&#x8FD0;&#x884C;&#xFF0C;&#x4F46;&#x8003;&#x8651;&#x5230;&#x5BF9;&#x6D3E;&#x751F;&#x7C7B;&#x7684;&#x4E9B;&#x5F71;&#x54CD;&#xFF0C;&#x6700;&#x597D;&#x8FD8;&#x662F;&#x5BF9;ICloneable&#x652F;&#x6301;&#x3002;&#x4E00;&#x4F46;&#x67D0;&#x4E2A;&#x7C7B;&#x578B;&#x652F;&#x6301;ICloneable, &#x90A3;&#x4E48;&#x6240;&#x6709;&#x7684;&#x6D3E;&#x751F;&#x7C7B;&#x90FD;&#x5FC5;&#x987B;&#x4FDD;&#x6301;&#x4E00;&#x81F4;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x6240;&#x6709;&#x7684;&#x6210;&#x5458;&#x5FC5;&#x987B;&#x652F;&#x6301;ICloneable&#x63A5;&#x53E3;&#x6216;&#x8005;&#x63D0;&#x4F9B;&#x4E00;&#x79CD;&#x673A;&#x5236;&#x652F;&#x6301;&#x62F7;&#x8D1D;&#x3002;&#x6700;&#x540E;&#xFF0C;&#x652F;&#x6301;&#x6DF1;&#x62F7;&#x8D1D;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x5728;&#x521B;&#x5EFA;&#x8BBE;&#x8BA1;&#x65F6;&#x5982;&#x679C;&#x5305;&#x542B;&#x6709;&#x7F51;&#x7EDC;&#x7ED3;&#x6784;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x4F1A;&#x4F7F;&#x62F7;&#x8D1D;&#x5F88;&#x6210;&#x95EE;&#x9898;&#x3002;ICloneable&#x4E5F;&#x89C9;&#x5BDF;&#x5230;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x5728;&#x5B83;&#x7684;&#x5B98;&#x65B9;&#x5B9A;&#x4E49;&#x4E2D;&#x6709;&#x8BF4;&#x660E;&#xFF1A;&#x5B83;&#x540C;&#x65F6;&#x652F;&#x6301;&#x6DF1;&#x62F7;&#x8D1D;&#x548C;&#x6D45;&#x62F7;&#x8D1D;&#x3002;&#x6D45;&#x62F7;&#x8D1D;&#x662F;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x8FD9;&#x4E2A;&#x65B0;&#x5BF9;&#x8C61;&#x5BF9;&#x5305;&#x542B;&#x5F53;&#x524D;&#x5BF9;&#x8C61;&#x4E2D;&#x6240;&#x6709;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x7684;&#x62F7;&#x8D1D;&#x3002;&#x5982;&#x679C;&#x8FD9;&#x4E9B;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x662F;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#x7684;&#xFF0C;&#x90A3;&#x4E48;&#x65B0;&#x7684;&#x5BF9;&#x8C61;&#x4E0E;&#x6E90;&#x5BF9;&#x8C61;&#x5305;&#x542B;&#x4E86;&#x540C;&#x6837;&#x7684;&#x5F15;&#x7528;&#x3002;&#x800C;&#x6DF1;&#x62F7;&#x8D1D;&#x5219;&#x53EF;&#x4EE5;&#x5F88;&#x597D;&#x7684;&#x62F7;&#x8D1D;&#x6240;&#x6709;&#x6210;&#x5458;&#x53D8;&#x91CF;&#xFF0C;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#x4E5F;&#x88AB;&#x9012;&#x5F52;&#x7684;&#x8FDB;&#x884C;&#x4E86;&#x62F7;&#x8D1D;&#x3002;&#x5BF9;&#x4E8E;&#x50CF;&#x6574;&#x578B;&#x8FD9;&#x6837;&#x7684;&#x5185;&#x7F6E;&#x7C7B;&#x578B;&#xFF0C;&#x6DF1;&#x62F7;&#x8D1D;&#x548C;&#x6D45;&#x62F7;&#x8D1D;&#x662F;&#x4E00;&#x6837;&#x7684;&#x7ED3;&#x679C;&#x3002;&#x54EA;&#x4E00;&#x79CD;&#x662F;&#x6211;&#x4EEC;&#x7684;&#x7C7B;&#x578B;&#x5E94;&#x8BE5;&#x652F;&#x6301;&#x7684;&#x5462;&#xFF1F;&#x8FD9;&#x53D6;&#x51B3;&#x4E8E;&#x7C7B;&#x578B;&#x672C;&#x8EAB;&#x3002;&#x4F46;&#x540C;&#x65F6;&#x5728;&#x4E00;&#x4E2A;&#x7C7B;&#x578B;&#x4E2D;&#x6DF7;&#x7528;&#x6DF1;&#x62F7;&#x8D1D;&#x548C;&#x6D45;&#x62F7;&#x8D1D;&#x4F1A;&#x5BFC;&#x81F4;&#x5F88;&#x591A;&#x4E0D;&#x4E00;&#x81F4;&#x7684;&#x95EE;&#x9898;&#x3002;&#x4E00;&#x4F46;&#x4F60;&#x6D89;&#x53CA;&#x5230;ICloneable&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x8FD9;&#x6837;&#x7684;&#x6DF7;&#x7528;&#x5C31;&#x5F88;&#x96BE;&#x89E3;&#x8131;&#x4E86;&#x3002;&#x5927;&#x591A;&#x6570;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x4EEC;&#x5E94;&#x8BE5;&#x5B8C;&#x5168;&#x907F;&#x514D;&#x4F7F;&#x7528;ICloneable&#xFF0C;&#x8BA9;&#x7C7B;&#x66F4;&#x7B80;&#x5355;&#x4E00;&#x4E9B;&#x3002;&#x8FD9;&#x6837;&#x4F7F;&#x7528;&#x548C;&#x5B9E;&#x73B0;&#x90FD;&#x76F8;&#x5BF9;&#x7B80;&#x5355;&#x5F97;&#x591A;&#x3002;<br/>&#x4EFB;&#x4F55;&#x53EA;&#x4EE5;&#x5185;&#x7F6E;&#x7C7B;&#x578B;&#x505A;&#x4E3A;&#x6210;&#x5458;&#x7684;&#x503C;&#x7C7B;&#x578B;&#x4E0D;&#x5FC5;&#x652F;&#x6301;ICloneable; &#x7528;&#x7B80;&#x5355;&#x7684;&#x8D4B;&#x503C;&#x8BED;&#x53E5;&#x5BF9;&#x7ED3;&#x6784;&#x7684;&#x6240;&#x6709;&#x503C;&#x8FDB;&#x884C;&#x62F7;&#x8D1D;&#x6BD4;Clone()&#x8981;&#x9AD8;&#x6548;&#x5F97;&#x591A;&#x3002;Clone()&#x65B9;&#x6CD5;&#x5FC5;&#x987B;&#x5BF9;&#x8FD4;&#x56DE;&#x7C7B;&#x578B;&#x8FDB;&#x884C;&#x88C5;&#x7BB1;&#xFF0C;&#x8FD9;&#x6837;&#x624D;&#x80FD;&#x5F3A;&#x5236;&#x8F6C;&#x5316;&#x6210;&#x4E00;&#x4E2A;System.Object&#x7684;&#x5F15;&#x7528;&#x3002;&#x800C;&#x8C03;&#x7528;&#x8005;&#x8FD8;&#x5F97;&#x518D;&#x7528;&#x5F3A;&#x5236;&#x8F6C;&#x5316;&#x4ECE;&#x7BB1;&#x5B50;&#x4E2D;&#x53D6;&#x56DE;&#x8FD9;&#x4E2A;&#x503C;&#x3002;&#x6211;&#x77E5;&#x9053;&#x4F60;&#x5DF2;&#x7ECF;&#x6709;&#x8DB3;&#x591F;&#x7684;&#x80FD;&#x529B;&#x8FD9;&#x6837;&#x505A;&#xFF0C;&#x4F46;&#x4E0D;&#x8981;&#x7528;Clone()&#x51FD;&#x6570;&#x6765;&#x53D6;&#x4EE3;&#x8D4B;&#x503C;&#x8BED;&#x53E5;&#x3002;<br/>&#x90A3;&#x4E48;&#xFF0C;&#x5F53;&#x4E00;&#x4E2A;&#x503C;&#x7C7B;&#x578B;&#x4E2D;&#x5305;&#x542B;&#x4E00;&#x4E2A;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#x65F6;&#x53C8;&#x4F1A;&#x600E;&#x6837;&#x5462;&#xFF1F;&#x6700;&#x5E38;&#x89C1;&#x7684;&#x4E00;&#x79CD;&#x60C5;&#x51B5;&#x5C31;&#x662F;&#x503C;&#x7C7B;&#x578B;&#x4E2D;&#x5305;&#x542B;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public struct ErrorMessage<br/>{<br/>&nbsp;&nbsp;private int errCode;<br/>&nbsp;&nbsp;private int details;<br/>&nbsp;&nbsp;private string msg;<br/> // details elided<br/>}<br/>&#x5B57;&#x7B26;&#x4E32;&#x662F;&#x4E00;&#x4E2A;&#x7279;&#x6B8A;&#x60C5;&#x51B5;&#xFF0C;&#x56E0;&#x4E3A;&#x5B83;&#x662F;&#x4E00;&#x4E2A;&#x6052;&#x5B9A;&#x7C7B;&#x3002;&#x5982;&#x679C;&#x4F60;&#x6307;&#x5B9A;&#x4E86;&#x4E00;&#x4E2A;&#x9519;&#x8BEF;&#x6D88;&#x606F;&#x4E32;&#xFF0C;&#x90A3;&#x4E48;&#x6240;&#x6709;&#x7684;&#x9519;&#x8BEF;&#x6D88;&#x606F;&#x7C7B;&#x90FD;&#x5F15;&#x7528;&#x5230;&#x540C;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x4E0A;&#x3002;&#x800C;&#x8FD9;&#x5E76;&#x4E0D;&#x4F1A;&#x5BFC;&#x81F4;&#x4EFB;&#x4F55;&#x95EE;&#x9898;&#xFF0C;&#x8FD9;&#x4E0E;&#x5176;&#x5B83;&#x4E00;&#x822C;&#x7684;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#x662F;&#x4E0D;&#x4E00;&#x6837;&#x7684;&#x3002;&#x5982;&#x679C;&#x4F60;&#x5728;&#x4EFB;&#x4F55;&#x4E00;&#x4E2A;&#x5F15;&#x7528;&#x4E0A;&#x4FEE;&#x6539;&#x4E86;msg&#x53D8;&#x91CF;&#xFF0C;&#x4F60;&#x4F1A;&#x5C31;&#x4E3A;&#x5B83;&#x91CD;&#x65B0;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;string&#x5BF9;&#x8C61;(&#x53C2;&#x89C1;&#x539F;&#x5219;7)&#x3002;<br/>(&#x8BD1;&#x6CE8;&#xFF1A;string&#x786E;&#x5B9E;&#x662F;&#x4E00;&#x4E2A;&#x5F88;&#x6709;&#x610F;&#x601D;&#x7684;&#x7C7B;&#xFF0C;&#x5F88;&#x591A;C++&#x7A0B;&#x5E8F;&#x5458;&#x5BF9;&#x8FD9;&#x4E2A;&#x7C7B;&#x4E0D;&#x7406;&#x89E3;&#xFF0C;&#x4E5F;&#x5F88;&#x6709;&#x4E00;&#x4E9B;C#&#x7A0B;&#x5E8F;&#x5BF9;&#x5B83;&#x4E0D;&#x7406;&#x89E3;&#xFF0C;&#x5BFC;&#x81F4;&#x5F88;&#x591A;&#x7684;&#x4F4E;&#x6548;&#xFF0C;&#x751A;&#x81F3;&#x9519;&#x8BEF;&#x95EE;&#x9898;&#x3002;&#x5E94;&#x8BE5;&#x597D;&#x597D;&#x7684;&#x7406;&#x89E3;&#x4E00;&#x4E0B;C#&#x91CC;&#x7684;string(&#x4EE5;&#x53CA;String&#x548C;StringBulider&#x4E4B;&#x95F4;&#x7684;&#x5173;&#x7CFB;)&#x8FD9;&#x4E2A;&#x7C7B;&#xFF0C;&#x8FD9;&#x5BF9;&#x4E8E;&#x5B66;&#x597D;C#&#x662F;&#x5F88;&#x6709;&#x5E2E;&#x52A9;&#x7684;&#x3002;&#x56E0;&#x4E3A;&#x8FD9;&#x79CD;&#x8BBE;&#x8BA1;&#x601D;&#x60F3;&#x53EF;&#x4EE5;&#x6CBF;&#x7528;&#x5230;&#x6211;&#x4EEC;&#x81EA;&#x5DF1;&#x7684;&#x7C7B;&#x578B;&#x4E2D;&#x3002;)<br/>&#x4E00;&#x822C;&#x60C5;&#x51B5;&#xFF0C;&#x5982;&#x679C;&#x4E00;&#x4E2A;&#x7ED3;&#x6784;&#x4E2D;&#x5305;&#x542B;&#x4E86;&#x4E00;&#x4E2A;&#x4EFB;&#x610F;&#x7684;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#xFF0C;&#x90A3;&#x4E48;&#x62F7;&#x8D1D;&#x65F6;&#x7684;&#x60C5;&#x51B5;&#x5C31;&#x590D;&#x6742;&#x591A;&#x4E86;&#x3002;&#x8FD9;&#x4E5F;&#x662F;&#x5F88;&#x5C11;&#x89C1;&#x7684;&#xFF0C;&#x5185;&#x7F6E;&#x7684;&#x8D4B;&#x503C;&#x8BED;&#x53E5;&#x4F1A;&#x5BF9;&#x7ED3;&#x6784;&#x8FDB;&#x884C;&#x6D45;&#x62F7;&#x8D1D;&#xFF0C;&#x8FD9;&#x6837;&#x4E24;&#x4E2A;&#x7ED3;&#x6784;&#x4E2D;&#x7684;&#x5F15;&#x7528;&#x53D8;&#x91CF;&#x5C31;&#x5F15;&#x7528;&#x5230;&#x540C;&#x4E2A;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x4E0A;&#x3002;&#x5982;&#x679C;&#x8981;&#x8FDB;&#x884C;&#x6DF1;&#x62F7;&#x8D1D;&#xFF0C;&#x90A3;&#x4E48;&#x4F60;&#x5C31;&#x5FC5;&#x987B;&#x5BF9;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#x4E5F;&#x8FDB;&#x884C;&#x62F7;&#x8D1D;&#xFF0C;&#x800C;&#x4E14;&#x8FD8;&#x8981;&#x77E5;&#x9053;&#x8BE5;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#x4E0A;&#x662F;&#x5426;&#x4E5F;&#x652F;&#x6301;&#x7528;Clone()&#x8FDB;&#x884C;&#x6DF1;&#x62F7;&#x8D1D;&#x3002;&#x4E0D;&#x7BA1;&#x662F;&#x54EA;&#x79CD;&#x60C5;&#x51B5;&#xFF0C;&#x4F60;&#x90FD;&#x4E0D;&#x7528;&#x5BF9;&#x503C;&#x7C7B;&#x578B;&#x6DFB;&#x52A0;&#x5BF9;ICloneable&#x7684;&#x652F;&#x6301;&#xFF0C;&#x8D4B;&#x503C;&#x8BED;&#x53E5;&#x4F1A;&#x5BF9;&#x503C;&#x7C7B;&#x578B;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x62F7;&#x8D1D;&#x3002;<br/>&#x4E00;&#x53E5;&#x6982;&#x62EC;&#x503C;&#x7C7B;&#x578B;&#xFF1A;&#x6CA1;&#x6709;&#x4EFB;&#x4F55;&#x7406;&#x7531;&#x8981;&#x7ED9;&#x4E00;&#x4E2A;&#x503C;&#x7C7B;&#x578B;&#x6DFB;&#x52A0;&#x5BF9;ICloneable&#x63A5;&#x53E3;&#x7684;&#x652F;&#x6301;! &#x597D;&#x4E86;&#xFF0C;&#x73B0;&#x5728;&#x8BA9;&#x6211;&#x4EEC;&#x518D;&#x770B;&#x770B;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#x3002;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#x5E94;&#x8BE5;&#x652F;&#x6301;ICloneable&#x63A5;&#x53E3;&#xFF0C;&#x4EE5;&#x4FBF;&#x660E;&#x786E;&#x7684;&#x7ED9;&#x51FA;&#x5B83;&#x662F;&#x652F;&#x6301;&#x6DF1;&#x62F7;&#x8D1D;&#x8FD8;&#x662F;&#x6D45;&#x62F7;&#x8D1D;&#x3002;&#x660E;&#x667A;&#x7684;&#x9009;&#x62E9;&#x662F;&#x6DFB;&#x52A0;&#x5BF9;ICloneable&#x7684;&#x652F;&#x6301;&#xFF0C;&#x56E0;&#x4E3A;&#x8FD9;&#x6837;&#x5C31;&#x660E;&#x786E;&#x7684;&#x8981;&#x6C42;&#x6240;&#x6709;&#x6D3E;&#x751F;&#x7C7B;&#x4E5F;&#x5FC5;&#x987B;&#x652F;&#x6301;ICloneable&#x3002;&#x770B;&#x4E0B;&#x9762;&#x8FD9;&#x4E2A;&#x7B80;&#x5355;&#x7684;&#x7EE7;&#x627F;&#x5173;&#x7CFB;&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;class BaseType : ICloneable<br/>{<br/>&nbsp;&nbsp;private string _label = &#34;class name&#34;;<br/>&nbsp;&nbsp;private int [] _values = new int [ 10 ];<br/>&nbsp;&nbsp;public object Clone()<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;BaseType rVal = new BaseType( );<br/>&nbsp;&nbsp;&nbsp;&nbsp;rVal._label = _label;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for( int i = 0; i &lt; _values.Length; i++ )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rVal._values[ i ] = _values[ i ];<br/>&nbsp;&nbsp;&nbsp;&nbsp;return rVal;<br/>&nbsp;&nbsp;}<br/>}<br/>class Derived : BaseType<br/>{<br/>&nbsp;&nbsp;private double [] _dValues = new double[ 10 ];<br/>&nbsp;&nbsp;static void Main( string[] args )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;Derived d = new Derived();<br/>&nbsp;&nbsp;&nbsp;&nbsp;Derived d2 = d.Clone() as Derived;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ( d2 == null )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine( &#34;null&#34; );<br/>&nbsp;&nbsp;}<br/>}<br/>&#x5982;&#x679C;&#x4F60;&#x8FD0;&#x884C;&#x8FD9;&#x4E2A;&#x7A0B;&#x5E8F;&#xFF0C;&#x4F60;&#x5C31;&#x4F1A;&#x53D1;&#x73B0;d2&#x4E3A;null&#x3002;&#x867D;&#x7136;Derived&#x662F;&#x4ECE;BaseType&#x6D3E;&#x751F;&#x7684;&#xFF0C;&#x4F46;&#x4ECE;BaseType&#x7C7B;&#x7EE7;&#x627F;&#x7684;Clone()&#x51FD;&#x6570;&#x5E76;&#x4E0D;&#x80FD;&#x6B63;&#x786E;&#x7684;&#x652F;&#x6301;Derived&#x7C7B;&#xFF1A;&#x5B83;&#x53EA;&#x62F7;&#x8D1D;&#x4E86;&#x57FA;&#x7C7B;&#x3002;BaseType.Clone()&#x521B;&#x5EFA;&#x7684;&#x662F;&#x4E00;&#x4E2A;BaseType&#x5BF9;&#x8C61;&#xFF0C;&#x4E0D;&#x662F;&#x6D3E;&#x751F;&#x7684;Derived&#x5BF9;&#x8C61;&#x3002;&#x8FD9;&#x5C31;&#x662F;&#x4E3A;&#x4EC0;&#x4E48;&#x7A0B;&#x5E8F;&#x4E2D;&#x7684;d2&#x4E3A;null&#x800C;&#x4E0D;&#x662F;&#x6D3E;&#x751F;&#x7684;Derived&#x5BF9;&#x8C61;&#x3002;&#x5373;&#x4F7F;&#x4F60;&#x514B;&#x670D;&#x4E86;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;BaseType.Clone()&#x4E5F;&#x4E0D;&#x80FD;&#x6B63;&#x786E;&#x7684;&#x62F7;&#x8D1D;&#x5728;Derived&#x7C7B;&#x4E2D;&#x5B9A;&#x4E49;&#x7684;_dValues&#x6570;&#x7EC4;&#x3002;&#x4E00;&#x4F46;&#x4F60;&#x5B9E;&#x73B0;&#x4E86;ICloneable, &#x4F60;&#x5C31;&#x5F3A;&#x5236;&#x8981;&#x6C42;&#x6240;&#x6709;&#x6D3E;&#x751F;&#x7C7B;&#x4E5F;&#x5FC5;&#x987B;&#x6B63;&#x786E;&#x7684;&#x5B9E;&#x73B0;&#x5B83;&#x3002;&#x5B9E;&#x9645;&#x4E0A;&#xFF0C;&#x4F60;&#x5E94;&#x8BE5;&#x63D0;&#x4F9B;&#x4E00;&#x4E2A;hook&#x51FD;&#x6570;&#xFF0C;&#x8BA9;&#x6240;&#x6709;&#x7684;&#x6D3E;&#x751F;&#x7C7B;&#x4F7F;&#x7528;&#x4F60;&#x7684;&#x62F7;&#x8D1D;&#x5B9E;&#x73B0;(&#x53C2;&#x89C1;&#x539F;&#x5219;21)&#x3002;&#x5728;&#x62F7;&#x8D1D;&#x65F6;&#xFF0C;&#x6D3E;&#x751F;&#x7C7B;&#x53EF;&#x4EE5;&#x53EA;&#x5BF9;&#x503C;&#x7C7B;&#x578B;&#x6210;&#x5458;&#x6216;&#x8005;&#x5B9E;&#x73B0;&#x4E86;ICloneable&#x63A5;&#x53E3;&#x7684;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#x6210;&#x5458;&#x8FDB;&#x884C;&#x62F7;&#x8D1D;&#x3002;&#x5BF9;&#x4E8E;&#x6D3E;&#x751F;&#x7C7B;&#x6765;&#x8BF4;&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x4E25;&#x683C;&#x7684;&#x8981;&#x6C42;&#x3002;&#x5728;&#x57FA;&#x7C7B;&#x4E0A;&#x5B9E;&#x73B0;ICloneable&#x63A5;&#x53E3;&#x901A;&#x5E38;&#x4F1A;&#x7ED9;&#x6D3E;&#x751F;&#x7C7B;&#x6DFB;&#x52A0;&#x8FD9;&#x6837;&#x7684;&#x8D1F;&#x62C5;&#xFF0C;&#x56E0;&#x6B64;&#x5728;&#x5BC6;&#x5C01;&#x7C7B;&#x4E2D;&#x5E94;&#x8BE5;&#x907F;&#x514D;&#x5B9E;&#x73B0;ICloneable &#x63A5;&#x53E3;&#x3002;<br/>&#x56E0;&#x6B64;&#xFF0C;&#x5F53;&#x6574;&#x4E2A;&#x7EE7;&#x627F;&#x7ED3;&#x6784;&#x90FD;&#x5FC5;&#x987B;&#x5B9E;&#x73B0;ICloneable&#x65F6;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x62BD;&#x8C61;&#x7684;Clone()&#x65B9;&#x6CD5;&#xFF0C;&#x7136;&#x540E;&#x5F3A;&#x5236;&#x6240;&#x6709;&#x7684;&#x6D3E;&#x751F;&#x7C7B;&#x90FD;&#x5B9E;&#x73B0;&#x5B83;&#x3002;<br/>&#x5728;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x4F60;&#x9700;&#x8981;&#x5B9A;&#x4E49;&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;&#x8BA9;&#x6D3E;&#x751F;&#x7C7B;&#x6765;&#x521B;&#x5EFA;&#x57FA;&#x7C7B;&#x6210;&#x5458;&#x7684;&#x62F7;&#x8D1D;&#x3002;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5B9A;&#x4E49;&#x4E00;&#x4E2A;&#x53D7;&#x4FDD;&#x62A4;&#x7684;&#x6784;&#x9020;&#x51FD;&#x6570;&#x6765;&#x5B9E;&#x73B0;&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;class BaseType<br/>{<br/>&nbsp;&nbsp;private string _label;<br/>&nbsp;&nbsp;private int [] _values;<br/>&nbsp;&nbsp;protected BaseType( )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;_label = &#34;class name&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;_values = new int [ 10 ];<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;// Used by devived values to clone<br/>&nbsp;&nbsp;protected BaseType( BaseType right )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;_label = right._label;<br/>&nbsp;&nbsp;&nbsp;&nbsp;_values = right._values.Clone( ) as int[ ] ;<br/>&nbsp;&nbsp;}<br/>}<br/>sealed class Derived : BaseType, ICloneable<br/>{<br/>&nbsp;&nbsp;private double [] _dValues = new double[ 10 ];<br/>&nbsp;&nbsp;public Derived ( )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;_dValues = new double [ 10 ];<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;// Construct a copy<br/>&nbsp;&nbsp;// using the base class copy ctor<br/>&nbsp;&nbsp;private Derived ( Derived right ) :<br/>&nbsp;&nbsp;&nbsp;&nbsp;base ( right )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;_dValues = right._dValues.Clone( )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as double[ ];<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;static void Main( string[] args )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;Derived d = new Derived();<br/>&nbsp;&nbsp;&nbsp;&nbsp;Derived d2 = d.Clone() as Derived;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ( d2 == null )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine( &#34;null&#34; );<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;public object Clone()<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;Derived rVal = new Derived( this );<br/>&nbsp;&nbsp;&nbsp;&nbsp;return rVal;<br/>&nbsp;&nbsp;}<br/>}<br/>&#x57FA;&#x7C7B;&#x5E76;&#x4E0D;&#x5B9E;&#x73B0;ICloneable&#x63A5;&#x53E3;; &#x901A;&#x8FC7;&#x63D0;&#x4F9B;&#x4E00;&#x4E2A;&#x53D7;&#x4FDD;&#x62A4;&#x7684;&#x6784;&#x9020;&#x51FD;&#x6570;&#xFF0C;&#x8BA9;&#x6D3E;&#x751F;&#x7C7B;&#x53EF;&#x4EE5;&#x62F7;&#x8D1D;&#x57FA;&#x7C7B;&#x7684;&#x6210;&#x5458;&#x3002;&#x53F6;&#x5B50;&#x7C7B;&#xFF0C;&#x5E94;&#x8BE5;&#x90FD;&#x662F;&#x5BC6;&#x5C01;&#x7684;&#xFF0C;&#x5FC5;&#x8981;&#x5B83;&#x5E94;&#x8BE5;&#x5B9E;&#x73B0;ICloneable&#x63A5;&#x53E3;&#x3002;&#x57FA;&#x7C7B;&#x4E0D;&#x5E94;&#x8BE5;&#x5F3A;&#x8FEB;&#x6240;&#x6709;&#x7684;&#x6D3E;&#x751F;&#x7C7B;&#x90FD;&#x8981;&#x5B9E;&#x73B0;ICloneable&#x63A5;&#x53E3;&#xFF0C;&#x4F46;&#x4F60;&#x5E94;&#x8BE5;&#x63D0;&#x4F9B;&#x4E00;&#x4E9B;&#x5FC5;&#x8981;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x4EE5;&#x4FBF;&#x90A3;&#x4E9B;&#x5E0C;&#x671B;&#x5B9E;&#x73B0;ICloneable&#x63A5;&#x53E3;&#x7684;&#x6D3E;&#x751F;&#x7C7B;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x3002;<br/>ICloneable&#x63A5;&#x53E3;&#x6709;&#x5B83;&#x7684;&#x7528;&#x6B66;&#x4E4B;&#x5730;&#xFF0C;&#x4F46;&#x76F8;&#x5BF9;&#x4E8E;&#x5B83;&#x7684;&#x89C4;&#x5219;&#x6765;&#x8BF4;&#xFF0C;&#x6211;&#x4EEC;&#x5E94;&#x8BE5;&#x907F;&#x514D;&#x5B83;&#x3002;&#x5BF9;&#x4E8E;&#x503C;&#x7C7B;&#x578B;&#xFF0C;&#x4F60;&#x4E0D;&#x5E94;&#x8BE5;&#x5B9E;&#x73B0;ICloneable&#x63A5;&#x53E3;&#xFF0C;&#x5E94;&#x8BE5;&#x4F7F;&#x7528;&#x8D4B;&#x503C;&#x8BED;&#x53E5;&#x3002;&#x5BF9;&#x4E8E;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#x6765;&#x8BF4;&#xFF0C;&#x53EA;&#x6709;&#x5728;&#x62F7;&#x8D1D;&#x786E;&#x5B9E;&#x6709;&#x5FC5;&#x8981;&#x5B58;&#x5728;&#x65F6;&#xFF0C;&#x624D;&#x5728;&#x53F6;&#x5B50;&#x7C7B;&#x4E0A;&#x5B9E;&#x73B0;&#x5BF9;ICloneable&#x7684;&#x652F;&#x6301;&#x3002;&#x57FA;&#x7C7B;&#x5728;&#x53EF;&#x80FD;&#x8981;&#x5BF9;ICloneable &#x8FDB;&#x884C;&#x652F;&#x6301;&#x65F6;&#xFF0C;&#x5E94;&#x8BE5;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x53D7;&#x4FDD;&#x62A4;&#x7684;&#x6784;&#x9020;&#x51FD;&#x6570;&#x3002;&#x603B;&#x800C;&#x8A00;&#x4E4B;&#xFF0C;&#x6211;&#x4EEC;&#x5E94;&#x8BE5;&#x5C3D;&#x91CF;&#x907F;&#x514D;&#x4F7F;&#x7528;ICloneable&#x63A5;&#x53E3;&#x3002;<br/>========================================================<br/>Item 27: Avoid ICloneable<br/>ICloneable sounds like a good idea: You implement the ICloneable interface for types that support copies. If you don&#39;t want to support copies, don&#39;t implement it. But your type does not live in a vacuum. Your decision to support ICloneable affects derived types as well. Once a type supports ICloneable, all its derived types must do the same. All its member types must also support ICloneable o&#114; have some other mechanism to cr&#101;ate a copy. Finally, supporting deep copies is very problematic when you cr&#101;ate designs that contain webs of objects. ICloneable finesses this problem in its official definition: It supports either a deep o&#114; a shallow copy. A shallow copy cr&#101;ates a new object that contains copies of all member variables. If those member variables are reference types, the new object refers to the same object that the o&#114;iginal does. A deep copy cr&#101;ates a new object that copies all member variables as well. All reference types are cloned recursively in the copy. In built-in types, such as integers, the deep and shallow copies produce the same results. Which one does a type support? That depends on the type. But mixing shallow and deep copies in the same object causes quite a few inconsistencies. When you go wading into the ICloneable waters, it can be hard to escape. Most often, avoiding ICloneable altogether makes a simpler class. It&#39;s easier to use, and it&#39;s easier to implement.<br/>Any value type that contains only built-in types as members does not need to support ICloneable; a simple assignment copies all the values of the struct more efficiently than Clone(). Clone() must box its return so that it can be coerced into a System.Object reference. The caller must perform another cast to extract the value from the box. You&#39;ve got enough to do. Don&#39;t write a Clone() function that replicates assignment.<br/>What about value types that contain reference types? The most obvious case is a value type that contains a string:<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public struct ErrorMessage<br/>{<br/>&nbsp;&nbsp;private int errCode;<br/>&nbsp;&nbsp;private int details;<br/>&nbsp;&nbsp;private string msg;<br/> // details elided<br/>}<br/>string is a special case because this class is immutable. If you assign an error message object, both error message objects refer to the same string. This does not cause any of the problems that might happen with a general reference type. If you change the msg variable through either reference, you cr&#101;ate a new string object (see Item 7).<br/>The general case of creating a struct that contains arbitrary reference variables is more complicated. It&#39;s also far more rare. The built-in assignment for the struct cr&#101;ates a shallow copy, with both structs referring to the same object. To cr&#101;ate a deep copy, you need to clone the contained reference type, and you need to know that the reference type supported a deep copy with its Clone() method. In either way, you don&#39;t add support for ICloneable to a value type; the assignment operator cr&#101;ates a new copy of any value type.<br/>That covers value types: There is never a good reason to support the ICloneable interface in value types. Now let&#39;s move on to reference types. Reference types should support the ICloneable interface to indicate that they support either shallow o&#114; deep copying. You should add support for ICloneable judiciously because doing so mandates that all classes derived from your type must also support ICloneable. Consider this small hierarchy:<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;class BaseType : ICloneable<br/>{<br/>&nbsp;&nbsp;private string _label = &#34;class name&#34;;<br/>&nbsp;&nbsp;private int [] _values = new int [ 10 ];<br/>&nbsp;&nbsp;public object Clone()<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;BaseType rVal = new BaseType( );<br/>&nbsp;&nbsp;&nbsp;&nbsp;rVal._label = _label;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for( int i = 0; i &lt; _values.Length; i++ )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rVal._values[ i ] = _values[ i ];<br/>&nbsp;&nbsp;&nbsp;&nbsp;return rVal;<br/>&nbsp;&nbsp;}<br/>}<br/>class Derived : BaseType<br/>{<br/>&nbsp;&nbsp;private double [] _dValues = new double[ 10 ];<br/>&nbsp;&nbsp;static void Main( string[] args )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;Derived d = new Derived();<br/>&nbsp;&nbsp;&nbsp;&nbsp;Derived d2 = d.Clone() as Derived;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ( d2 == null )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine( &#34;null&#34; );<br/>&nbsp;&nbsp;}<br/>}<br/>If you run this program, you will find that the value of d2 is null. The Derived class does inherit ICloneable.Clone() from BaseType, but that implementation is not correct for the Derived type: It only clones the base type. BaseType.Clone() cr&#101;ates a BaseType object, not a Derived object. That is why d2 is null in the test programit&#39;s not a Derived object. However, even if you could overcome this problem, BaseType.Clone() could not properly copy the _dValues array that was defined in Derived. When you implement ICloneable, you force all derived classes to implement it as well. In fact, you should provide a hook function to let all derived classes use your implementation (see Item 21). To support cloning, derived classes can add only member variables that are value types o&#114; reference types that implement ICloneable. That is a very stringent limitation on all derived classes. Adding ICloneable support to base classes usually cr&#101;ates such a burden on derived types that you should avoid implementing ICloneable in nonsealed classes.<br/>When an entire hierarchy must implement ICloneable, you can cr&#101;ate an abstract Clone() method and force all derived classes to implement it.<br/>In those cases, you need to define a way for the derived classes to cr&#101;ate copies of the base members. That&#39;s done by defining a protected copy constructor:<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;class BaseType<br/>{<br/>&nbsp;&nbsp;private string _label;<br/>&nbsp;&nbsp;private int [] _values;<br/>&nbsp;&nbsp;protected BaseType( )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;_label = &#34;class name&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;_values = new int [ 10 ];<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;// Used by devived values to clone<br/>&nbsp;&nbsp;protected BaseType( BaseType right )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;_label = right._label;<br/>&nbsp;&nbsp;&nbsp;&nbsp;_values = right._values.Clone( ) as int[ ] ;<br/>&nbsp;&nbsp;}<br/>}<br/>sealed class Derived : BaseType, ICloneable<br/>{<br/>&nbsp;&nbsp;private double [] _dValues = new double[ 10 ];<br/>&nbsp;&nbsp;public Derived ( )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;_dValues = new double [ 10 ];<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;// Construct a copy<br/>&nbsp;&nbsp;// using the base class copy ctor<br/>&nbsp;&nbsp;private Derived ( Derived right ) :<br/>&nbsp;&nbsp;&nbsp;&nbsp;base ( right )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;_dValues = right._dValues.Clone( )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as double[ ];<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;static void Main( string[] args )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;Derived d = new Derived();<br/>&nbsp;&nbsp;&nbsp;&nbsp;Derived d2 = d.Clone() as Derived;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ( d2 == null )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine( &#34;null&#34; );<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;public object Clone()<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;Derived rVal = new Derived( this );<br/>&nbsp;&nbsp;&nbsp;&nbsp;return rVal;<br/>&nbsp;&nbsp;}<br/>}<br/>Base classes do not implement ICloneable; they provide a protected copy constructor that enables derived classes to copy the base class parts. Leaf classes, which should all be sealed, implement ICloneable when necessary. The base class does not force all derived classes to implement ICloneable, but it provides the necessary methods for any derived classes that want ICloneable support.<br/>ICloneable does have its use, but it is the exception rather than rule. You should never add support for ICloneable to value types; use the assignment operation instead. You should add support for ICloneable to leaf classes when a copy operation is truly necessary for the type. Base classes that are likely to be used wh&#101;re ICloneable will be supported should cr&#101;ate a protected copy constructor. In all other cases, avoid ICloneable.</p><p> + <a href="#CommentCard">&#x67E5;&#x770B;&#x5F53;&#x524D;&#x65E5;&#x5FD7;&#x8BC4;&#x8BBA;</a> (0)</p><p>&nbsp;<br/><br/><a href="wap.asp?do=Login">&#x767B;&#x5F55;</a></p><p><br/>&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;</p><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a></p><p><a href="http://www.pjhome.net/wap.asp">PJBlog3&nbsp;v3.2.9.518</a>&nbsp;Inside.</p><p>Processed&nbsp;In&nbsp;0.707&nbsp;ms</p><do type="prev" label="&#x8FD4;&#x56DE;"><prev/></do></card><card id="postCommentCard"><p><b>&#x6807;&#x9898;&#x3A;</b> <a href="#MainCard">&#x45;&#x66;&#x66;&#x65;&#x63;&#x74;&#x69;&#x76;&#x65;&#x20;&#x43;&#x23;&#x20;&#x539F;&#x5219;&#x32;&#x37;&#xFF1A;&#x907F;&#x514D;&#x4F7F;&#x7528;&#x49;&#x43;&#x6C;&#x6F;&#x6E;&#x65;&#x61;&#x62;&#x6C;&#x65;</a></p><p><br/>你没有权限发表评论</p><p><br/>&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;</p><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a></p><p><a href="http://www.pjhome.net/wap.asp">PJBlog3&nbsp;v3.2.9.518</a>&nbsp;Inside.</p><p>Processed&nbsp;In&nbsp;0.707&nbsp;ms</p><do type="prev" label="&#x8FD4;&#x56DE;"><prev/></do></card><card id="CommentCard"><p>&#x6682;&#x65E0;&#x8BC4;&#x8BBA;</p><p><a href="#MainCard">&#x8FD4;&#x56DE;</a></p><p><br/>&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;</p><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a></p><p><a href="http://www.pjhome.net/wap.asp">PJBlog3&nbsp;v3.2.9.518</a>&nbsp;Inside.</p><p>Processed&nbsp;In&nbsp;0.707&nbsp;ms</p><do type="prev" label="&#x8FD4;&#x56DE;"><prev/></do></card>
</wml>
