当前位置: 代码迷 >> C# >> 求善心大侠帮忙分析一下这段程序 本人初学C
  详细解决方案

求善心大侠帮忙分析一下这段程序 本人初学C

热度:19   发布时间:2016-05-05 03:53:43.0
求好心大侠帮忙分析一下这段程序 本人初学C#
// 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
        }
    }

初学就该从基本的规则学起
  相关解决方案