《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 关注
- 291 浏览
添加回答
举报
0/150
提交
取消