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?
更新:
我会尝试建议的解决方案.关于编译错误,没有,我能够得到问题中提到的输出.
你的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'.