派生类无法在C#中显示基类变量的值

Pra*_*dhi 0 c# variables inheritance base-class

我正在尝试执行以下代码

class A
{
    protected int a;
    protected char b;
    public void Show()
    {
        a=5;
        MessageBox.Show(""+a);
    }
}

class B:A
{
    public void Show()
    {
        b='z';
        MessageBox.Show(""+a+ ""+b);
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到5(中值a)作为输出,当我做aa.show()其中aa的实例A,但是当我这样做bb.show(),这里bb是实例B输出出来的,0(价值a)z(的价值b).

有人可以解释为什么派生类无法显示a的当前值,即使它已被声明为受保护,而它能够显示正确的值b

更新:

我会尝试建议的解决方案.关于编译错误,没有,我能够得到问题中提到的输出.

Pao*_*olo 9

你的B方法隐藏了A方法,你应该收到编译器警告.

更好的如下 - 请注意虚拟和覆盖关键字:

class A
{
    protected int a;
    protected char b;
    public virtual void Show()
    {
        a=5;
        MessageBox.Show(""+a);
    }
}
class B:A
{
    public override void Show()
    {
        base.Show();
        b='z';
        MessageBox.Show(""+a+ ""+b);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在这里你会弹出两个消息框.您需要将A中变量的设置与消息框功能分开,例如在构造函数中设置'a'.