关于接口和类的一个问题

atomorrow 2005-07-17 06:39:45
程序如下:
static void Main(string[] args)
{

Point p = new Point();
p.x = p.y = 1;
Console.WriteLine(p);

p.Change(2,2);
Console.WriteLine(p);

Object o = p;
Console.WriteLine(o);

((Point)o).Change(3,3);
Console.WriteLine((Point)o);

((IChangeBoxedPoint)p).Change(4,4);
Console.WriteLine(p);

((IChangeBoxedPoint)o).Change(5,5);
Console.WriteLine(o);



}

interface IChangeBoxedPoint
{
void Change( Int32 x, Int32 y );
}

struct Point:IChangeBoxedPoint
{
public Int32 x;
public Int32 y;

public void Change( Int32 x, Int32 y)
{
this.x = x;
this.y = y;
}

public override string ToString()
{
return string.Format( "({0},{1})",x,y );
}
}

答案是:
(1,1)
(2,2)
(2,2)
(2,2)
(2,2)
(5,5)

对于(3,3)(4,4)(5,5)的请了解的人解答一下。谢谢
...全文
199 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
atomorrow 2005-07-17
  • 打赏
  • 举报
回复
明白了,哈哈哈
lanbaibai 2005-07-17
  • 打赏
  • 举报
回复
关注在
俊哥V 2005-07-17
  • 打赏
  • 举报
回复
装箱(Boxing)和拆箱(Unboxing)
C#数据类型可分为在堆栈上分配内存的值类型 和 托管堆上分配内存的引用类型。

Boxing 是把值类型转换为引用类型;Unboxing 是把引用类型转换成值类型。

int i = 10;
object o = i; // Boxing. 系统会在托管堆上为 o 分配一个新的空间
int j = (int)o; // Unboxing. 系统在堆栈上分配一个临时空间(这里给了j),并把o的值放进去. 改变 o或j 并不会影响另一个的值。


atomorrow 2005-07-17
  • 打赏
  • 举报
回复
疯疯就说说完整么,从头说道尾吧
atomorrow 2005-07-17
  • 打赏
  • 举报
回复
不明白box和unbox的问题
俊哥V 2005-07-17
  • 打赏
  • 举报
回复
忘了说,Point 是一个结构体。所以p是一个值类型,而Object是引用类型。那么 Object o = p; 就是一个boxing的过程.
俊哥V 2005-07-17
  • 打赏
  • 举报
回复
是 box 和 unboxing 的问题

好好想想就能明白了的。
atomorrow 2005-07-17
  • 打赏
  • 举报
回复
其实就是那个struct 的问题,如果是普通类public class的
那么答案就是
(1,1)
(2,2)
(2,2)
(3,3)
(4,4)
(5,5)

什么意思???什么意思???struct 这个怎么理解???
atomorrow 2005-07-17
  • 打赏
  • 举报
回复
(3,3)的那个输出应该是
Console.WriteLine(o);
而不是
Console.WriteLine((Point)o);

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧