Затенение против переопределения? - PullRequest
0 голосов
/ 27 июля 2011

Это один из примеров в msdn, связанных с затенением и переопределением:

using System;

namespace test
{
    class A
    {
        public void F() { Console.WriteLine("A.F"); }
        public virtual void G() { Console.WriteLine("A.G"); }
    }
    class B : A
    {
        new public void F() { Console.WriteLine("B.F"); }
        public override void G() { Console.WriteLine("B.G"); }
    }
    class Test
    {
        static void Main()
        {
            B b = new B();
            A a = b;
            a.F();
            b.F();
            a.G();
            b.G();

            Console.WriteLine();
        }
    }
}


A.F();
B.F();
B.G();
B.G();

I was expecting the out put will be 
B.F(); //change is here
B.F();
B.G();
B.G();

, так как A a = b; a содержит ссылку на объект b и, следовательно, имеет функцию класса, производную от вызова.

Почему вызывается функция A?

1 Ответ

0 голосов
/ 27 июля 2011

Во время выполнения, хотя a действительно является переменной типа B, это явно переменная типа A (A a = b;), и поэтому во время выполнения, так как a объявляется как тип A,вызывается метод F () класса A.

Надеюсь, это помогло!

NS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...