回 帖 发 新 帖 刷新版面

主题:求助,不理解的一个语句

我在学习C#入门经典(第3版),在讲解隐藏基类成员和重写的区别时,有下面代码:
public class MyBaseClass
{
    public virtual void DoSomething()
    {
         Console.WriteLine("Base imp");
    }
}
public class MyDerivedClass:MyBaseClass
{
    public override void DoSomething()
    {
         Console.WriteLine("Derived imp");
    }
}

MyDerivedClass MyObj=new MyDerivedClass();
MyBaseClass myBaseObj;
myBaseObj=myObj;   //这句是什么意思啊
myBaseObj.DoSomething();
结果如下:"Derived imp

各位高手,添加注释的这句是什么意思啊,不明白,具体的内容细节是什么?总之是不明白,希望高手能给出一个详细的解释。这里先谢谢了,谢谢了,非常感谢!

回复列表 (共3个回复)

沙发


我也在看这本书,我也不明白这个问题了,我看书的进度和你差不多,可以和你交流一下吗?你给我留个QQ号。

板凳

那你看懂上面那一句了吗?我连上面那一句也没看懂MyBaseClass myBaseObj;按理说
myBaseObj如果是MyBaseClass的实例,那也要这样实例化
    MyBaseClass myBaseObj=new MyBaseClass();才行呀。为什么呢?

3 楼

我昨天又把书看了一下,说说我的理解:因为可能是基类MyBaseClass带有的是虚拟的方法成员,不能被实例化,而只能定义它的变量MyBaseClass myBaseObj;
myBaseObj=myObj; 是把其派生类实例化对象赋给基类变量,即基类变量引用此实例对象,其实书上是为了来说明myBaseObj.DoSomething();这一句是基类来调用方法,让读者看看结果是怎样的,而结果是Derived imp,这说明从基类调用的方法因为是虚拟的,被派生类重写后,则不被调用,调用的是派生类重写的方法。
  我也不知道这样理解对不对。

我来回复

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