// abstract_keyword.cs
// Abstract Classes
using System;
abstract class BaseClass // Abstract class
{
protected int _x = 100;
protected int _y = 150;
public abstract void AbstractMethod(); // Abstract method
public abstract int X { get; }
public abstract int Y { get; }
}
class DerivedClass : BaseClass
{
public override void AbstractMethod()
{
_x++;
_y++;
}
public override int X // overriding property
{
get
{
return _x + 10;
}
}
public override int Y // overriding property
{
get
{
return _y + 10;
}
}
static void Main()
{
DerivedClass o = new DerivedClass();
o.AbstractMethod();
Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
}
}
主函数只访问了派生类的 public override void AbstractMethod()函数为什么结果是X=111,Y=161。本人初学C#,求详细解答
------解决思路----------------------
第一次通过方法_x++时,x值还没有自增,
第二次 retrun _x+10,此时_x已经自增+1了。
------解决思路----------------------
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)
------解决思路----------------------
to撸主,
首先,纠正一下,AbstractMethod方法,哥看成X++了,你的是_x++
代码执行顺序
1、调用基类_x的声明,然后_x自增1,变成101
2、通过派生类调用X,代码进入X属性的get代码段
断点这么打
public override void AbstractMethod()
{
_x++;//此次打断点,执行完,监视下_x的值会变成101
_y++;
}
public override int X // overriding property
{
get
{
return _x + 10;//此次打断点,执行完会看到_x的值变成101
}
}
------解决思路----------------------
这要断点调试干什么?都是你自己指定的
public override int X // overriding property
{
get
{
return _x + 10; //表示当读取 X 属性时返回 _x + 10
}
}
初学就该从基本的规则学起