.net基础问题

小飛不想飛 2014-02-19 11:09:38

class Person { 
public int Age { 
get { 
return 3; 
}
 set { }
 } 

Person p1 = new Person(); 
p1.Age = 30;
p1.Age++;
Console.Write(p1.Age);//输出3


为什么输出的会是3?求解释?
...全文
523 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
噩运 2014-02-21
  • 打赏
  • 举报
回复
9楼正解set并没有给age赋予新值
china_booseen 2014-02-21
  • 打赏
  • 举报
回复
class Person { private int age; public int getAge(){ return 3; } public void setAge(int value){ } } 最终编译的结果 大概这样吧
阿道夫小狮子 2014-02-21
  • 打赏
  • 举报
回复
public class pereson { public int age { get { return age ; } set { age = 3; } } person person1 = new person(); person.age = 30; person.age++; console.write(person.age); 不好意识啊!兄弟,我也是新手,只能照书给你打了...
KeepSayingNo 2014-02-21
  • 打赏
  • 举报
回复
这个肯定是等于3啊,因为你是用这个对象直接取获取其age属性值,那当然是3啊,你前面的那些只是对p1.Age这个变量进行的操作
  • 打赏
  • 举报
回复
1.set没有执行任何动作 2.就是set执行了某操作,但是get返回的是固定值 所以不管p1.Age再怎么++,都不会返回别的值,只是3
向先先 2014-02-21
  • 打赏
  • 举报
回复
p1.Age = 30 调用Age的Set而Console.WriteLine(p.Age);调用了get
h4ck3rs 2014-02-21
  • 打赏
  • 举报
回复
一道这样的小题讨论了这么久。
花小姐的春天 2014-02-20
  • 打赏
  • 举报
回复
楼主难道是想问i++ 和++i的区别吗?还是深入到计算机处理机制的问题!还是就题论题,如何是就题论题那是因为你set里面没有做操作,自然age的值一辈子都是3了!如果是想说i++和++i的问题,那么我想楼主不会不懂吧!
ManAsWolf 2014-02-20
  • 打赏
  • 举报
回复
很简单的逻辑问题。。智商。
欢乐的小猪 2014-02-20
  • 打赏
  • 举报
回复
因为 get { return 3; }
Regan-lin 2014-02-19
  • 打赏
  • 举报
回复
自己都写了返回3了,不返回3能返回什么
yp136 2014-02-19
  • 打赏
  • 举报
回复
引用 2 楼 zxf_feng 的回复:
因为,这已经固定输出为3,不会获取age值: get { return 3; }
+1+1+1+1+1····
q107770540 2014-02-19
  • 打赏
  • 举报
回复
IL_0001:  newobj      UserQuery+Person..ctor
IL_0006:  stloc.0     
IL_0007:  ldloc.0     
IL_0008:  ldc.i4.s    1E 
IL_000A:  callvirt    UserQuery+Person.set_Age
IL_000F:  nop         
IL_0010:  ldloc.0     
IL_0011:  dup         
IL_0012:  callvirt    UserQuery+Person.get_Age
IL_0017:  ldc.i4.1    
IL_0018:  add         
IL_0019:  callvirt    UserQuery+Person.set_Age
IL_001E:  nop         
IL_001F:  ldloc.0     
IL_0020:  callvirt    UserQuery+Person.get_Age
IL_0025:  call        System.Console.Write

Person.get_Age:
IL_0000:  nop         
IL_0001:  ldc.i4.3    
IL_0002:  stloc.0     
IL_0003:  br.s        IL_0005
IL_0005:  ldloc.0     
IL_0006:  ret         

Person.set_Age:
IL_0000:  nop         
IL_0001:  ret         
你看IL代码,set了几次age,没用,最终 get_Age还是返回3
魂之挽歌来袭 2014-02-19
  • 打赏
  • 举报
回复
就算你set里面有为age复制 你get里面那么写 一样会是输出3
q107770540 2014-02-19
  • 打赏
  • 举报
回复
p1.Age = 30; p1.Age++; 这两句对p1对象的Age属性没有造成任何影响
阿三 2014-02-19
  • 打赏
  • 举报
回复
因为,这已经固定输出为3,不会获取age值: get { return 3; }
q107770540 2014-02-19
  • 打赏
  • 举报
回复
1. set啥也没干,所以Age始终返回3 2. 注意i++ 和 ++i的区别
黄瓜黄瓜 2014-02-19
  • 打赏
  • 举报
回复

var age=p1.Age++; 
Console.Write(age);//输出3
输出4
maiker 2014-02-19
  • 打赏
  • 举报
回复
逐语句,调试一下,p1.Age是属性
zhouxingyu896 2014-02-19
  • 打赏
  • 举报
回复
支持1楼的.
加载更多回复(6)

111,092

社区成员

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

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

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