?《CLR via C#(第三版)》中第124頁。
using System;
internal struct Point{
private Int32 m_x,m_y;
?
public Point(Int32 x,Int32 y){ m_x=x;m_y=y; }
?
public void ChangePoint(Int32 x,Int32 y)
{ m_x=x;m_y=y; }
?
public override String ToString()
{ return String.Format("({0},{1})“,m_x,m_y); }
?
}
public sealed class Program
{
public static void Main(){
Point p=new Point(1,1);
Console.WriteLine(p);
?
p.Change(2,2);
Console.WriteLine(p);
?
Object o=p;
Console.WriteLine(o);
?
((Point)o).Change(3,3);
Console.WriteLine(o);
}
}
A、作者說在第一次調用WriteLine之前,p要進行封裝,WriteLine會在已裝箱的Point上調用ToString,并與其的那樣顯示(1,1)?!疚揖蜎]弄懂為什么是在在WriteLine之前就封裝了,不是在WriteLine的時候封裝嗎???】
我理解的是在WriteLine方法的時候進行了封裝。 但是他的意思是在之前就封裝了再WriteLine里面調用了ToString方法,這兒沒有搞懂。。。
B、然后p調用Change方法,把m_xhe m_y都修改為2,第二次調用WriteLine時,要求再次對p進行封裝,并預期的那樣顯示(2,2) 這個我可以理解的。
3 回答

炎炎設計
TA貢獻1808條經驗 獲得超4個贊
因為此時WriteLine使用的是 object 參數,那么在調用 WriteLine 之前,需要先把Point轉換為Object類型。WriteLine只負責接收Object類型的參數,這個Object類型的參數是怎么得來的是不由WriteLine來管的。

慕碼人8056858
TA貢獻1803條經驗 獲得超6個贊
“WriteLine會在已裝箱的Point上調用ToString”
這句話沒問題,裝好箱,WriteLine才能調用ToString。
這名話并沒有說在WriteLine語句執行之前進行裝箱。
這里有一篇不錯的圖文并茂的裝箱方面的文章:
- 3 回答
- 0 關注
- 318 瀏覽
添加回答
舉報
0/150
提交
取消