为了账号安全,请及时绑定邮箱和手机立即绑定

大侠们:这串代码输出什么以及原因?不要拷到VS中运行!

大侠们:这串代码输出什么以及原因?不要拷到VS中运行!

哔哔one 2018-12-07 08:00:10
声明一个结构体类型的Point 1 public struct Point 2 { 3 private int x; 4 private int y; 5 public Point(int _x, int _y) 6 { 7 this.x = _x; 8 this.y = _y; 9 } 10 public void Change(int _x, int _y) 11 { 12 this.x = _x; 13 this.y = _y; 14 } 15 public override string ToString() 16 { 17 return string.Format("({0},{1})", this.x, this.y); 18 } 19 }   2、分布采取不同的操作后,会在控制台输出什么内容? 1 Point p = new Point(1, 1); 2 Console.WriteLine(p); 3 4 p.Change(2, 2); 5 Console.WriteLine(p); 6 7 object o = p; 8 Console.WriteLine(o); 9 10 ((Point)o).Change(3, 3); 11 Console.WriteLine(o);
查看完整描述

4 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

1,1    

2,2

2,2

2,2

和楼上一样,我估计前三个没有难度,你想考大家的是最后一个为什么是2,2吧?

查看完整回答
反对 回复 2018-12-16
?
森林海

TA贡献2011条经验 获得超2个赞

自己理解的答案是:

1,1    

2,2

2,2

2,2

实际vs运行的答案:跟上一样

楼主看下关注拆箱和装箱的知识,这个题目是clr vir c# 那本书上的吧

查看完整回答
反对 回复 2018-12-16
?
忽然笑

TA贡献1806条经验 获得超5个赞

是的,开始看理解的不是很深,问下大家,关注的还是值类型和引用类型、线程栈和堆

查看完整回答
反对 回复 2018-12-16
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

Point p = new Point(1, 1);
Console.WriteLine(p);      // 1,1
 
p.Change(2, 2);
Console.WriteLine(p);      //2,2

object o = p;                   //装箱, o 是一个新的引用类型的变量, 内部的值是当前p的值
Console.WriteLine(o);      //2,2   

Point q = ((Point)o);        //拆箱,  q是一个新的值类型的变量 - 与原来的o没关系了
q.Change(3, 3);
Console.WriteLine(o);      //o 还是 2,2

Console.WriteLine(q);      //新的q值 为 3,3

查看完整回答
反对 回复 2018-12-16
  • 4 回答
  • 0 关注
  • 589 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号