回 帖 发 新 帖 刷新版面

主题:[讨论]大家来看一个微软件的认证题,我看不明白.

15. 分析下列程序中类MyClass 的定义
class BaseClass
{
public int i;
}
class MyClass:BaseClass
{
public new int i;
}
则下列语句在Console 上的输出为_______.
MyClass y = new MyClass();
BaseClass x = y;
x.i = 100;
Console.WriteLine(“{0}, {1}”,x.i,y.i);
(提示:注意类MyClass 中的new 关键字)
大家帮我看下答案是什么,再给我分析一下,谢谢!

回复列表 (共2个回复)

沙发

这是一个继承隐藏基类的问题
如果派生类中没有使用NEW的话,在编译过程会有警告。
使用NEW也就意味着MyClass.i版本替换了BaseClass.i版本。此时的BaseClass.i已经被隐藏掉了,取而代之的是MyClass.i,运行结果是100,0
要注意一点的是NEW不能和OVERRIDE一起使用,会起冲突的噢。

板凳

显示结果:100,0
子类继承父类的过程中,一般不会有这种情况出现.正因为使用了NEW,它覆盖了父类的BaseClass.i,显然不会显示结果.

我来回复

您尚未登录,请登录后再回复。点此登录或注册