// abstract_keyword.cs class DerivedClass : BaseClass public override int X // overriding property public override int Y // overriding property static void Main() 主函数只访问了派生类的 public override void AbstractMethod()函数为什么结果是X=111,Y=161。本人初学C#,求详细解答 |
|
请楼主移驾C#论坛:http://bbs.csdn.net/forums/CSharp
|
|
o.X = _x++ +10, 另一个同理
|
|
这里是C/C++呢
|
|
1、override关键字,是派生类重写基类成员
2、那么在派生类调用_x++,是调用的派生类重写的属性X(进行+10运算,得到110),然后AbstractMethod进行自增1,得到结果111。 |
|
可是你最后结果是在调用x与y的属性方法~~必然会产生结果(_x++)+10这样的效果即111的结果出现。
Y也是一样的原理。 |
|
5楼大哥,Hello-Jimmy 你好 程序的运算顺序是什么呢?(上来先运算哪句然后运算哪句。。。。)程序一开始不是先运算主程序(main函数)吗?
|
|
5分 |
第一次通过方法_x++时,x值还没有自增,
第二次 retrun _x+10,此时_x已经自增+1了。 |
5分 |
DerivedClass o = new DerivedClass(); //_x = 100 _y=150
o.AbstractMethod(); //_x=101 _y=151 (因为有操作 _x++ _y++) Console.WriteLine(“x = {0}, y = {1}”, o.X, o.Y); //o.X=111 o.Y=161 (因为有操作 _x+10 _y+10) |
|
|
//F5单步调试,main方法第一行打断点 static void Main() { DerivedClass o = new DerivedClass(); o.AbstractMethod();//进入方法体,先调用X属性 Console.WriteLine("x = {0}, y = {1}", o.X, o.Y); } |
|
|
|
撸主,get内以及AbstractMethod你都没打断点,直接到Console.WriteLine的,哪里是单步调试呢?
|
|
刚问了下百度怎么打断点,呵呵,但这两句不知道是干什么的 大哥指教啊 |
|
靠,你断点没打对地方! 基础知识你自己看msdn吧! |
|
|
|
25分 |
to撸主,
首先,纠正一下,AbstractMethod方法,哥看成X++了,你的是_x++ 代码执行顺序 断点这么打 public override void AbstractMethod() { _x++;//此次打断点,执行完,监视下_x的值会变成101 _y++; } public override int X // overriding property { get { return _x + 10;//此次打断点,执行完会看到_x的值变成101 } } |
纠正,上面的帖子,
return _x + 10; 处注释写错,改成 //此次打断点,执行完会看到_x的值变成111 |
|
5分 |
这要断点调试干什么?都是你自己指定的
public override int X // overriding property { get { return _x + 10; //表示当读取 X 属性时返回 _x + 10 } } 初学就该从基本的规则学起 |
撸主搞不明白代码执行顺序,让他打断点走一遍。 |
|
明白了,谢谢大家的帮忙。
|
|
x y 都是加10再加1 ,有什么问题吗?
去看看继承的东西吧 |