首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

今日面试遇到一神题,求解释

2013-10-15 
今天面试遇到一神题,求解释今天面试遇到一神题,求解释public class A{public virtual void Print(){Consol

今天面试遇到一神题,求解释
今天面试遇到一神题,求解释
public class A
    {
        public virtual void Print()
        {
            Console.WriteLine("A");
        }
    }

    public class B : A
    {
        public override void Print()
        {
            Console.WriteLine("B");
        }
    }

    public class C : B
    {
        public  void Print()
        {
            Console.WriteLine("C");
        }
    }

    public class D : C
    {
        public new virtual void Print()
        {
            Console.WriteLine("D");
        }
    }

不求甚解,谁能解释下,下面4个方法分别的输出结果,为什么会这么输出
            A a = new D();
            a.Print();//B

            B b = new B();
            A a1 = (A)b;
            a1.Print();//B

            C c = new C();
            A a2 = (A)c;
            a2.Print();//B

            D d = new D();
            C c1 = (C)d;
            c1.Print();//C

[解决办法]
不知道有什么好解释的,你要是不懂那就说明你根本就不知道override,virtual,new 这三个关键字的意思。
回去好好翻翻书吧。
[解决办法]
考的知识点是考 多态~
为什么会这么输出: 明白多态 就应该明白了~
[解决办法]
这里面有三个Print()方法
一个属于A,一个属于C,一个属于D

只要你明白这两句话你就明白这题的意思了。
[解决办法]
继承,多态的问题,看了LZ还需加强
[解决办法]
这个应该算是基础题,不算神题吧。
[解决办法]
打个断掉一个个调试
[解决办法]

引用:
今天面试遇到一神题,求解释
public class A
    {
        public virtual void Print()
        {
            Console.WriteLine("A");
        }
    }

    public class B : A
    {
        public override void Print()
        {
            Console.WriteLine("B");
        }
    }

    public class C : B
    {
        public  void Print()
        {
            Console.WriteLine("C");
        }
    }

    public class D : C
    {
        public new virtual void Print()
        {
            Console.WriteLine("D");


        }
    }

不求甚解,谁能解释下,下面4个方法分别的输出结果,为什么会这么输出
            A a = new D();
            a.Print();//B

            B b = new B();
            A a1 = (A)b;
            a1.Print();//B

            C c = new C();
            A a2 = (A)c;
            a2.Print();//B

            D d = new D();
            C c1 = (C)d;
            c1.Print();//C

多看看书啊
[解决办法]
额,这是基本题啊。

自己回去打基础,这玩意弄不明白,谁敢相信你简历上的“精通net,精通面对对象,精通3层”

ps:去补看《CLR via C#》 或者《你必须知道的.net》

热点排行