美文网首页面试程序员.NET
一道面试题的思考

一道面试题的思考

作者: 圣杰 | 来源:发表于2017-08-25 09:35 被阅读526次

    在继承中new和override相同点和区别?看下面的代码,有一个基类A,B1和B2都继承自A,并且使用不同的方式改变了父类方法Print()的行为。测试代码输出什么?为什么?

    public void DoTest()
    {
        B1 b1 = new B1(); B2 b2 = new B2();
        b1.Print(); b2.Print();      //按预期应该输出 B1、B2
    
        A ab1 = new B1(); A ab2 = new B2();
        ab1.Print(); ab2.Print();   //这里应该输出什么呢?
    }
    public class A
    {
        public virtual void Print() { Console.WriteLine("A"); }
    }
    public class B1 : A
    {
        public override void Print() { Console.WriteLine("B1"); }
    }
    public class B2 : A
    {
        public new void Print() { Console.WriteLine("B2"); }
    }
    

    不得不承认,这道题很考验.net程序员的基础知识。看似简单的继承,重载和覆写,却大有玄机。
    它不仅涉及到对象的创建,也涉及到对象在内存的分配,更要求面试者对对象在内存中的结构分布有深刻的认识。

    分析结果 对象在内存中的结构 对象在内存中的结构分布

    参考自:.NET面试题解析(04)-类型、方法与继承

    相关文章

      网友评论

      • 摩羯码农:今天在地铁口看<你必须知道的.net>第七章就问了这个问题😁
        圣杰: @摩羯码农 嗯,挺巧,是本好书。

      本文标题:一道面试题的思考

      本文链接:https://www.haomeiwen.com/subject/fxtudxtx.html